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

时间:2016-12-01 10:22:03

标签: csv awk command-line terminal command

我正在使用我在互联网上找到的这个命令行在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

所以问题是这行只在终端打印结果但是我想修改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作为新列。 提前谢谢!

2 个答案:

答案 0 :(得分:2)

类似的东西,

$ 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的链接。

答案 1 :(得分:0)

Node.connect :api@ip-10-0-19-179.eu-central-1.compute.internal  
** (CompileError) iex:2: invalid call 179.eu()
    (stdlib) lists.erl:1354: :lists.mapfoldl/3
    (stdlib) lists.erl:1355: :lists.mapfoldl/3
    (stdlib) lists.erl:1354: :lists.mapfoldl/3

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