gpt4 book ai didi

bash - 如何删除管道中的每个第二个字节?

转载 作者:行者123 更新时间:2023-11-29 09:38:52 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com