我有以下数据:
cat received.cap | grep -E "0x00(2|3)0" | cut -d " " -f 2-
0000 0000 bbc0 0000 0000 0000 0000 0000
5155 4642 5155 4a43 516b 4a44
0000 0000 d4da 0000 0000 0000 0000 0001
5130 4e44 5245 5245 5245 5646
0000 0000 f5f3 0000 0000 0000 0000 0002
5255 5647 526b 5a47 5230 634b
我想要每隔一行的最后两个字段:
0000 0000
5155 4642 5155 4a43 516b 4a44
0000 0001
5130 4e44 5245 5245 5245 5646
0000 0002
5255 5647 526b 5a47 5230 634b
...并将整体结果连接到一个没有空格的字符串中:
000000005155464251554a43516b4a440000000151304e445245524552455646...
是否可以通过继续我当前的管道来实现?
最佳答案
假设您的输入文件是:
$ cat file
0000 0000 bbc0 0000 0000 0000 0000 0000
5155 4642 5155 4a43 516b 4a44
0000 0000 d4da 0000 0000 0000 0000 0001
5130 4e44 5245 5245 5245 5646
0000 0000 f5f3 0000 0000 0000 0000 0002
5255 5647 526b 5a47 5230 634b
你可以使用这个 awk
命令:
awk 'NR%2{print $(NF-1),$NF} (NR+1)%2{$1=$1;print}' OFS="" ORS="" file
这依赖于 NR
表示记录的数量(例如行)。它每隔两行 打印最后两个字段。
OFS
和 ORS
是设置为空字符串的输出定界符,可以在一行中不带空格地获取所有内容。
语句$1=$1
是强制awk 根据ORS
和OFS
强加的格式重新格式化字符串。
如果你想在字符串末尾换行,你可以添加语句END{print "\n"}
。
关于linux - 每隔一行剪切字段并将结果连接到一个没有空格的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50619697/