用于在 csv 中插入新列的 awk 命令

awk comand for inserting new column in csv

我正在使用我在互联网上找到的这个命令行在 csv 文件中添加一个新列:

awk '{print ,,,,,,,,,,,F,,,,,}' FS=, OFS=, F='0' file.csv

所以问题是这一行只在终端打印结果,但我想修改 file.csv,这可能吗? 此外,当我执行此命令行时,我得到的输出是:

原始 CSV:

11;ALE;Augsburg;1;Jentzsch;Simon Jentzsch;35;28;28;28;0;2520;1;0;-41;t
11;ALE;Augsburg;2;Verhaegh;Paul Johannes Gerardus Verhaegh;28;26;26;25;0;2333;3;0;1;t
11;ALE;Augsburg;18;Callsen-Bracker;Jan-Ingwer Callsen-Bracker;27;30;25;24;5;2310;7;0;4;t

终端输出:

,,,,,,,,,,,0,,,,,;Jentzsch;Simon Jentzsch;35;28;28;28;0;2520;1;0;-41;t
,,,,,,,,,,,0,,,,,;Verhaegh;Paul Johannes Gerardus Verhaegh;28;26;26;25;0;2333;3;0;1;t
,,,,,,,,,,,0,,,,,8;Callsen-Bracker;Jan-Ingwer Callsen-Bracker;27;30;25;24;5;2310;7;0;4;t

很难解释,但我想要的是这样的:

11;ALE;Augsburg;1;Jentzsch;Simon Jentzsch;35;28;28;28;0;0;2520;1;0;-41;t
11;ALE;Augsburg;2;Verhaegh;Paul Johannes Gerardus Verhaegh;28;26;26;25;0;0;2333;3;0;1;t
11;ALE;Augsburg;18;Callsen-Bracker;Jan-Ingwer Callsen-Bracker;27;30;25;24;5;0;2310;7;0;4;t

所以只需在原来的第 11 列之后添加一个 0 作为新列。 提前致谢!

有点像,

$ awk -F";" -v OFS=";" '=OFS"0"' file
11;ALE;Augsburg;1;Jentzsch;Simon Jentzsch;35;28;28;28;0;0;2520;1;0;-41;t
11;ALE;Augsburg;2;Verhaegh;Paul Johannes Gerardus Verhaegh;28;26;26;25;0;0;2333;3;0;1;t
11;ALE;Augsburg;18;Callsen-Bracker;Jan-Ingwer Callsen-Bracker;27;30;25;24;5;0;2310;7;0;4;t

您无法将输出重定向到文件,因为我们正在从同一文件读取,因此我们可以将其重定向到新文件并将新文件作为旧文件移动。

例子

$ awk -F";" -v OFS=";" '=OFS"0"' file > new_file && mv new_file file

编辑

如果您使用的是 4.1.0 或更高版本的 awk,您也可以使用 -i 选项。

$ awk -i inplace -F";" -v OFS=";" '=OFS"0"{print}' file

这将就地编辑文件。感谢@JamesBrown 的 link.

$ echo 'a;b;c;d' | awk '{sub(/([^;]*;){2}/,"&0;")}1'
a;b;0;c;d

只需将 2 更改为 11 或其他...