[英]How can I add a column in the 4th position in a txt file using sed, awk?
[英]How can I add a column to a specific position in a csv file using cat, sed, awk or cut?
我有一個包含以下內容的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可以通過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
您可以使用重定向操作符將其寫入新文件(末尾> newfile
)
邏輯很簡單:
-v FS=',' -v OFS=','
將輸入和輸出字段分隔符設置為逗號( ,
) BEGIN{print "col1, col2, col3, col4"}
用更新的列名創建一個新的頭文件,請記住在實際處理文件之前執行awk
的BEGIN
塊 awk
的<action>
部分, NR>1{k=$3; $3="\\t"; $4=k; print $0}
NR>1{k=$3; $3="\\t"; $4=k; print $0}
NR>1{k=$3; $3="\\t"; $4=k; print $0}
跳過原始文件的標題,備份k
中的第3列,將其覆蓋並替換為空的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
$ awk -v f=3 'BEGIN{FS=OFS=","} {$f = (NR>1?"":"col"f) FS $f} 1' file
col1,col2,col3,col4
1,1,,1
2,2,,2
3,3,,3
4,4,,4
以上是在此文件上運行的:
$ cat file
col1,col2,col4
1,1,1
2,2,2
3,3,3
4,4,4
添加白色空間來品嘗...
如果問題顯示在第一列之前確實有空間,那么我們就來濫用它:
$ awk -F"(,* +)" '{for(i=j=1; ++j<NF; i++) $i=$j; $i=""} NR==1 {$3="col3"; OFS=","} 1' file
col1,col2,col3,col5
1,1,,1
2,2,,2
3,3,,3
4,4,,4
如果不:
$ awk '{$(NF+=1)=$NF; $(NF-1)=(NR==1?"col3":"")","} 1' file
col1, col2, col3, col5
1, 1, , 1
2, 2, , 2
3, 3, , 3
4, 4, , 4
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.