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

Shell 在文件的每一行的特定位置添加值,shell,Shell,这是linux系统中的csv文件。这是文件中的一行 :/var/opt/data#vi data_2018_07.csv LGPAR,数据,6154326198747321900,gprs,464623201315531,NRI,1.45890,0.000000,0.0000,2016-01-12 01:50:582016-01-12 15:50:58,0,11,0,0,0,0,02550,NO,NO,NO,1056.gz 类似地,我们在该文件中有300000行。我们所需要的只是在每一行迭代中的

这是linux系统中的csv文件。这是文件中的一行

:/var/opt/data#vi data_2018_07.csv

LGPAR,数据,6154326198747321900,gprs,464623201315531,NRI,1.45890,0.000000,0.0000,2016-01-12 01:50:582016-01-12 15:50:58,0,11,0,0,0,0,02550,NO,NO,NO,1056.gz

类似地,我们在该文件中有300000行。我们所需要的只是在每一行迭代中的NO,xxxx.gz之间添加增量值(第24个值)

LGPAR,数据,6154326198747321900,gprs,464623201315531,NRI,1.45890,0.000000,0.0000,2016-01-12 01:50:582016-01-12 15:50:58,0,11,0,0,0,0,02550,NO,NO,NO,11056.gz
LGRDR,数据,6154326198747321900,gprs,464623201315531,NRI,1.45890,0.000000,0.0000,2016-01-12 01:50:582016-01-12 15:50:58,0,11,0,0,0,02550,NO,NO,NO,21057.gz

我们可以使用一个小的shell脚本在所有行的完整文件中这样做吗?注意:每行中的行不同。

使用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