在文件的每一行中的特定位置添加值

时间:2018-07-09 12:44:56

标签: shell

这是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脚本在完整的文件中为所有行做到这一点吗?注意:每行中的行都不同。

1 个答案:

答案 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