如何使用 cat、sed、awk 或 cut 将列添加到 csv 文件中的特定位置?

如何使用 cat、sed、awk 或 cut 将列添加到 csv 文件中的特定位置?

我有一个包含以下内容的 csv 文件:

col1, col2, col5
1,    1,    1
2,    2,    2
3,    3,    3
4,    4,    4

我需要在文件的第三个位置添加一列,其中包含标题但包含空值。

col1, col2, col3, col4
1,    1,        ,   1
2,    2,        ,   2
3,    3,        ,   3
4,    4,        ,   4

有没有办法使用 cat、sed、awk 或 cut 等 Linux 命令之一来完成此操作?

我知道使用 cut 可以按 columns 修改文件cut -d , -f1,2,3 file1 > file2。但似乎没有添加自定义列的选项。

任何帮助将非常感激。

答案1

以下是sed实现结果的命令:

sed '1s/\(.*,\)\([^,]*\)$/\1col3,\2/;
     2,$s/\(.*,\)\([^,]*\)$/\1,\2/' file.csv

,这会找到一行中的最后一个并将其替换为

  • col3,在第一行
  • ,在所有其他线路上

该命令只是将所需的输出打印到stdout.如果您想就地编辑文件,请-i切换到上述命令。

答案2

$ awk 'BEGIN { FS=","; OFS=",\t" };
       FNR == 1 { print $1,$2,"col3","col4" };
       FNR  > 1 { print $1,$2,"\t",$3 }' file.csv 
col1,    col2,  col3,   col4
1,      1,      ,       1
2,      2,      ,       2
3,      3,      ,       3
4,      4,      ,       4

相关内容