向 csv 文件添加减量字段

向 csv 文件添加减量字段

我有一个 CSV 文件,内容类似于

10;12;33;44;55;66;77;88
1;2;3;4;5;6;7;8
110;112;133;144;155;616;771;818
...etc

每行有八个数字,以 分隔;

我需要在每行的开头添加一个新字段,从 1184 开始向下,所以最终文件将是

1184;10;12;33;44;55;66;77;88
1183;1;2;3;4;5;6;7;8
1182;110;112;133;144;155;616;771;818
... etc

我怎样才能用awkmacOS 上的东西来做到这一点?

答案1

awk 'BEGIN { n = 1184 } { printf("%d;%s\n", n--, $0) }' infile >outfile

或者,如果您想n在命令行上设置:

awk -v n=1184 '{ printf("%d;%s\n", n--, $0) }' infile >outfile

或者,使用print而不是printf

awk -v n=1184 '{ print n-- ";" $0 }' infile >outfile

或者,awk在新字段和该行的其余部分之间插入字段分隔符:

awk -v n=1184 -v OFS=';' '{ print n--, $0 }' infile >outfile

或者,仅修改第一个;分隔字段,然后打印记录:

awk -F ';' -v n=1184 -v OFS=';' '{ $1 = n-- OFS $1; print }' infile >outfile

这将为每个现有行添加存储在变量中的数字作为前缀n,同时减少该变量。线路上的现有数据将不加修改地传递。

输出被写入outfile并给出问题中的示例数据,这看起来像

1184;10;12;33;44;55;66;77;88
1183;1;2;3;4;5;6;7;8
1182;110;112;133;144;155;616;771;818

两个文件名infile必须outfile不同,否则您最终将清空输入数据文件并丢失它。

相关内容