bash - 使用 awk 在 bash 脚本中创建 ":"分隔列表

标签 bash awk

我有以下几行

380:<CHECKSUM_VALIDATION>
393:</CHECKSUM_VALIDATION>
437:<CHECKSUM_VALIDATION>
441:</CHECKSUM_VALIDATION>

我需要将其格式化如下

CHECKSUM_VALIDATION:380:393
CHECKSUM_VALIDATION:437:441

是否可以使用“awk”实现上述输出? [我正在使用 bash]

谢谢你!

最佳答案

给你:

awk -F '[:<>/]+' '{ n = $1; getline; print $2 ":" n ":" $1 }'

说明:

  • 使用 -F 设置字段分隔符是 :<>/ 的混合序列字符,这样第一个字段将是数字,第二个字段将是 CHECKSUM_VALIDATION
  • 保存变量 n 中的第一个字段并读取下一行(这将覆盖 $1 )
  • 打印该行:上一行的数字和当前行的字段的组合

另一种不使用 getline 的方法:

awk -F '[:<>/]+' 'NR % 2 { n = $1 } NR % 2 == 0 { print $2 ":" n ":" $1 }'

这个使用记录计数器 NR判断是否到了打印的时间: if NR为奇数,将第一个字段保存在 n 中,如果NR是偶数,则打印。

关于bash - 使用 awk 在 bash 脚本中创建 ":"分隔列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21965747/

相关文章:

bash - 使用相对路径压缩文件?

regex - 为什么在此正则表达式替换中丢失引号转义?

linux - 如何在 linux 中删除 awk 中的尾随\n

linux - awk: 一个文本文件中的词频,如何输出到myFile.txt?

bash - 杀死一系列进程

linux - 使用 Awk 或 Bash 减去两列的值?

linux - 如何影响Linux中的父进程环境?

bash - 始终在 grep 中包含第一行

linux - 将每 N 行输入放入一个新列

bash - 用sed除去除方括号外的所有内容,然后缩进