linux - 每隔一行剪切字段并将结果连接到一个没有空格的字符串

标签 linux bash shell

我有以下数据:

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 表示记录的数量(例如行)。它每隔两行 打印最后两个字段。

OFSORS 是设置为空字符串的输出定界符,可以在一行中不带空格地获取所有内容。

语句$1=$1 是强制awk 根据ORSOFS 强加的格式重新格式化字符串。

如果你想在字符串末尾换行,你可以添加语句END{print "\n"}

关于linux - 每隔一行剪切字段并将结果连接到一个没有空格的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50619697/

相关文章:

linux - awk 中的变量操作

c++ - 在 32 位环境中链接到 32 位共享目标文件会产生 ELFCLASS64 错误

linux - 如何删除位置参数的扩展名?

c++ - 我需要做什么才能通过仅在我的 unix 系统上输入名称来运行我的 C++ 程序

linux - 输出重定向到没有临时文件的同一个文件

linux - 修复 awk 命令中数据与本地不匹配的问题

bash - 在 bash complete 中指定两个文件扩展名

bash - 如何让 Cloud9 IDE 在后台运行?

python - Django管理命令是在单独的进程中执行的吗?

linux - 在 Linux 中的 Bash 脚本中检测 key 释放