ebe*_*tbm 2 linux bash awk sed
我有一个包含此内容的csv文件:
col1, col2, col5
1, 1, 1
2, 2, 2
3, 3, 3
4, 4, 4
Run Code Online (Sandbox Code Playgroud)
我需要在文件的第三个位置添加一个带有标题但是空值的列.
col1, col2, col3, col4
1, 1, , 1
2, 2, , 2
3, 3, , 3
4, 4, , 4
Run Code Online (Sandbox Code Playgroud)
有没有办法使用像cat,sed,awk或cut这样的Linux命令之一?
我知道有cut可以通过列cut -d,-f1,2,3 file1> file2修改文件.但似乎没有添加自定义列的选项.
任何帮助将非常感激.
这是我能做的最好的事情 awk
$ awk -v FS=',' -v OFS=',' 'BEGIN{print "col1, col2, col3, col4"} NR>1{k=$3; $3="\t"; $4=k; print $0}' newfile
col1, col2, col3, col4
1, 1, , 1
2, 2, , 2
3, 3, , 3
4, 4, , 4
Run Code Online (Sandbox Code Playgroud)
您可以使用重定向运算符将其写入新文件(> newfile最后)
逻辑是直截了当的: -
-v FS=',' -v OFS=','将输入和输出字段分隔符设置为逗号(,)BEGIN{print "col1, col2, col3, col4"}使用更新的列名创建一个新标头,记住在实际处理文件之前执行的BEGIN块awk<action>部分awk,NR>1{k=$3; $3="\t"; $4=k; print $0}我从原始文件中跳过标题,对第3列进行备份k,覆盖它并替换为空的tab-space第4列,将恢复为较旧的第3列值.fedorqui在评论中另一个很酷的建议,以下更简单的方法来做到这一点.
$ awk 'BEGIN {FS=OFS=","} NR==1{$0="col1, col2, col3, col4"} NR>1{$3=sprintf("\t,%s",$3)}1' file
col1, col2, col3, col4
1, 1, , 1
2, 2, , 2
3, 3, , 3
4, 4, , 4
Run Code Online (Sandbox Code Playgroud)