我有一个 bash 管道,例如$ src_prog | dst_prog
.
我可以向管道中插入什么命令,以便每隔一个字节被静默丢弃?
我希望 dst_prog 只接收字节 0,2,4,6...
附言这需要适用于一个字节的所有值,而不仅仅是 ASCII 或 UTF8。
最佳答案
更新另一个awk:
$ echo -ne abcdef\\n123456\\nåäö |
LC_ALL=C awk -F "" '{
for(i=1;i<=NF;i++) # iterate all chars
if(i%2!=p) # output every other char
printf $i
if(p=((p&&NF%2)||(!p&&!(NF%2)))) # xor
printf "\n" # handle newlines, all but the last
}'
输出:
ace
246��
输出到 hexdump -C
:
00000000 61 63 65 0a 32 34 36 c3 c3 c3 0a |ace.246....|
0000000b
它处理换行但在最后一个换行时失败(echo -n
但看到转储的结尾)。
或者你可以使用这个小的 c 程序:
$ cat foo.c
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int c;
int i=0;
while((c=getchar()) != EOF) {
if((i=!i)!=0)
printf("%c",c);
}
exit(0);
}
然后:
$ gcc -Wall foo.c && echo -n 1234äö | ./a.out | hexdump -C
00000000 31 33 c3 c3 |13..|
00000004
关于bash - 如何删除管道中的每个第二个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58837213/