我有一个 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
我怎样才能用awk
macOS 上的东西来做到这一点?
答案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
不同,否则您最终将清空输入数据文件并丢失它。