用于在csv中插入新列的awk comand

用于在csv中插入新列的awk comand,csv,awk,command-line,terminal,command,Csv,Awk,Command Line,Terminal,Command,我正在使用在internet上找到的此命令行在csv文件中添加新列: awk '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,F,$12,$13,$14,$15,$16}' FS=, OFS=, F='0' file.csv 所以问题是这一行只在终端中打印结果,但我想修改文件.csv,这可能吗? 此外,当我执行此命令行时,我得到的输出如下: 原始CSV: 11;ALE;Augsburg;1;Jentzsch;Simon Jentzsch;35;28;28;

我正在使用在internet上找到的此命令行在csv文件中添加新列:

awk '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,F,$12,$13,$14,$15,$16}' FS=, OFS=, F='0' file.csv
所以问题是这一行只在终端中打印结果,但我想修改文件.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=";" '$11=$11OFS"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=";" '$11=$11OFS"0"' file > new_file && mv new_file file
编辑

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

$ awk -i inplace -F";" -v OFS=";" '$11=$11OFS"0"{print}' file
它将在位编辑文件。感谢@JamesBrown的链接。

类似于

$ awk -F";" -v OFS=";" '$11=$11OFS"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
$ echo 'a;b;c;d' | awk '{sub(/([^;]*;){2}/,"&0;")}1'
a;b;0;c;d

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

示例

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

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

$ awk -i inplace -F";" -v OFS=";" '$11=$11OFS"0"{print}' file
它将在位编辑文件。谢谢@JamesBrown的链接

$ echo 'a;b;c;d' | awk '{sub(/([^;]*;){2}/,"&0;")}1'
a;b;0;c;d
只要把2改成11或者其他什么


只需将2改为11或其他什么…

如果我们将结果重定向到新文件就可以了,我可以稍后删除旧文件version@JamesBrown有线。在我测试时,它工作得很好:/@yeker3您可以使用普通的shell重定向<代码>awk。。。。file>new_file并使用
mv
替换文件
mv new_file file
如果您使用的是足够新的Gnu awk,也会出现这种情况。@JamesBrown ohh,这对我来说是新鲜事。谢谢你的链接。如果我们将结果重定向到新文件,我可以稍后删除旧文件version@JamesBrown有线。在我测试时,它工作得很好:/@yeker3您可以使用普通的shell重定向<代码>awk。。。。file>new_file并使用
mv
替换文件
mv new_file file
如果您使用的是足够新的Gnu awk,也会出现这种情况。@JamesBrown ohh,这对我来说是新鲜事。谢谢你的链接。