我有以下几行
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/