如何在csv文件中增加具有递增数字的列值

时间:2017-02-02 05:36:39

标签: awk sed

我有一个包含3列的文本文件,如下所示。

$ cat test.txt
1,A,300
1,B,300
1,C,300

直到现在我试过了awk -F, '{$3=$3+1;print}' OFS=, test.txt

但输出结果如下:

1,A,301
1,B,301
1,C,301

&安培;下面是我想要的输出

现在我只想增加第三列,输出应该如下所示

1,A,300
1,B,301
1,C,302

如何实现所需的输出?

5 个答案:

答案 0 :(得分:2)

 awk 'BEGIN{x=0;FS=OFS=","} NF>1{$3=$3+x;x++}1' inputfile
1,A,300

1,B,301

1,C,302

说明:

BEGIN Block:它包含x,这是一个初始设置为零的计数器,FSOFS/./用于忽略空行(如果没有空行,则删除此部分)。 $3=$3+x:这会将计数器的值添加到$3x++:增加cunter的值。

答案 1 :(得分:2)

可能是,假设线条像你的样品一样是顺序的)

awk -F ',' '{sub($3"$",$3+NR-1)}7' YourFile

它使用行数作为增量值,更改行结束而不是字段值(不同于awk POV,不需要使用分隔符重建行)

备选,如果在可修改的行之间为空或其他行(我任意使用NF作为过滤器,但它取决于您的条件,如果有的话)

awk -F ',' 'NF{sub($3"$",$3+i++)}7' YourFile

答案 2 :(得分:0)

尝试此NR从1开始,因此NR -1应该为您提供正确的数字

 awk -F, '{$3=$3+NR-1;print}' OFS=, test.txt

答案 3 :(得分:0)

又一个:

awk 'BEGIN{ FS=OFS="," } ($3+=i++)||1 ' file

答案 4 :(得分:-1)

awk'BEGIN {i = 0; FS = OFS =“,”} NF> 1 {$ 3 = $ 3 + i; i ++} 1'文件名

它包含x,这是一个初始设置为零的计数器FS和OFS。 /./用于忽略空白行(如果没有空白行,请删除此部分)。

$ 3 = $ 3 + i:这会将计数器的值加到$ 3。 i ++:增加计数器的值。必须并且应该在awk之间留出空格,并开始以及文件名和文件结尾