AWK:如何实现编号自增?

标签 awk sed

我有一个文件。文件内容是:

20210126000880000003|3|33.00|20210126|15:30
1|20210126000000000000000000002207|1220210126080109|1000|100000000000000319|100058110000000325|402041000012|402041000012|PT07|621067000000123645|收款方户名|2021-01-26|2021-01-26|10.00|TN|NCS|12|875466

2|20210126000000000000000000002208|1220210126080110|1000|100000000000000319|100058110000000325|402041000012|402041000012|PT06|621067000000123645|收款方户名|2021-01-26|2021-01-26|20.00|TN|NCS|12|875466

3|20210126000000000000000000002209|1220210126080111|1000|100000000000000319|100058110000000325|402041000012|402041000012|PT08|621067000000123645|收款方户名|2021-01-26|2021-01-26|3.00|TN|NCS|12|875466

我使用awk命令:

awk -F"|" 'NR==1{print $1};FNR==2{print $2,$3}'  testfile

得到如下结果:

20210126000880000003
20210126000000000000000000002207 1220210126080109

我希望数字自动增加:

awk -F"|" 'NR==1{print $1+1};FNR==2{print $2+1,$3+1}' testfile

但得到以下结果:

20210126000880001024
20210126000000000944237587726336 1220210126080110

有问题:

我想要数字自动增加:希望结果是:

20210126000880000003
20210126000000000000000000002207|1220210126080109
-------------------------------------------------
20210126000880000004
20210126000000000000000000002208|1220210126080110
--------------------------------------------------
20210126000880000005
20210126000000000000000000002209|1220210126080111

如何自动增加?

谢谢!

最佳答案

您可以尝试这个gnu awk命令:

awk -M 'BEGIN {FS=OFS="|"} NR == 1 {hdr = $1; next} NF>2 {print ++hdr; print $2, $3; print "-------------------"}' file

20210126000880000004
20210126000000000000000000002207|1220210126080109
-------------------
20210126000880000005
20210126000000000000000000002208|1220210126080110
-------------------
20210126000880000006
20210126000000000000000000002209|1220210126080111
-------------------

更具可读性的版本:

awk -M 'BEGIN {
   FS=OFS="|"
}
NR == 1 {
   hdr = $1
   next
}
NF > 2 {
   print ++hdr
   print $2, $3
   print "-------------------"
}' file

这是一个不需要 -M 的 POSIX awk 解决方案:

awk 'BEGIN {FS=OFS="|"} NR == 1 {hdr = $1; next} NF>2 {"echo " hdr " + 1 | bc" | getline hdr; print hdr; print $2, $3; print "-------------------"}' file

20210126000880000004
20210126000000000000000000002207|1220210126080109
-------------------
20210126000880000005
20210126000000000000000000002208|1220210126080110
-------------------
20210126000880000006
20210126000000000000000000002209|1220210126080111
-------------------

关于AWK:如何实现编号自增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66065678/

相关文章:

linux - 正则表达式模式在 sublime text 中找到,但在 linux sed 命令 sed 中找不到

linux - 重击 : Loop a file until it reaches specific number of matching strings and start over

linux - 用基于匹配组的评估字符串替换字符串(优雅的方式,不使用 for .. in)

javascript - 使用 CMD 或 JavaScript 批量查找和删除部分 HTML 文件

regex - 在标记字符之后选择具有 n 个相同字段的行

bash - vim:如果为空,则将第二列空白替换为同一列中的值

regex - 使用 Sed 和正则表达式替换字符串

linux - 括号和 ips 之间的所有内容都解析失败

shell - 是否可以通过 gnu awk 命令使用变量而不是文件?

linux - 查找一个字符串并添加之前保存在变量中的多行字符串