这是Linux系统中的一个csv文件。这是文件的一行。
:/ var / opt / data#vi data_2018_07.csv
LGPAR,DATA,61543261,98747321900,gprs,464623201315531,NRI,1.45890,0.000000,0.0000,,2016-01-12 01:50:58,2016-01-12 15:50:58,0,11,0,0,0,0,25250,NO,NO,NO,1056.gz
类似地,我们在该文件中有300000行。我们想要的是在每次行迭代的NO,xxxx.gz之间的某个位置添加增量值(第24个值)。
LGPAR,DATA,61543261,98747321900,gprs,464623201315531,NRI,1.45890,0.000000,0.0000,,2016-01-12 01:50:58,2016-01-12 15:50:58,0,11,0,0,0,0,25250,NO,NO,NO,1, 1056.gz
LGRDR,DATA,61543261,98747321900,gprs,464623201315531,NRI,1.45890,0.000000,0.0000,,2016-01-12 01:50:58,2016-01-12 15:50:58,0,11,0,0,0,0,25250,NO,NO,NO,2, 1057.gz
我们可以使用小shell脚本在完整的文件中为所有行做到这一点吗?注意:每行中的行都不同。
答案 0 :(得分:1)
使用awk的快速方法:
awk -F'[.,]' '{x=1+$(NF-1);sub(/[0-9]+\.gz/,x".gz")}7' file
使用一些数据进行测试:
kent$ cat f
foo,bar,foo,bar,123.gz
foo,bar,foo,bar,1057.gz
kent$ awk -F'[.,]' '{x=1+$(NF-1);sub(/[0-9]+\.gz/,x".gz")}7' f
foo,bar,foo,bar,124.gz
foo,bar,foo,bar,1058.gz