有沒有辦法使用bash刪除某些輸入CSV文件的最後四列?最後四列的字段長度可能不同,因此僅從每行末尾刪除一定數量的字符是不夠的。bash方法從csv文件中刪除最後4列
回答
如果所有行都具有相同數量的字段,則可以執行此操作,否則,可以使用awk。
cut -d, -f1-6 # assuming 10 fields
將打印出的第一個6個字段,如果你想控制輸出seperater使用--output分隔符=串
awk -F , -v OFS=, '{ for (i=1;i<=NF-4;i++){ printf $i, }; printf "\n"}'
遍歷領域多達日打印領域的數量-4他們出去了。
如果知道列數,則可以使用cut
。例如,如果你的文件有9列,而逗號是您的分隔符:
cut -d',' -f -5
然而,這種假設在您的CSV文件不包含任何逗號數據。 cut
也會將引號內的逗號解釋爲分隔符。
AWK一行代碼:
awk -F, '{for(i=0;++i<=NF-5;)printf $i", ";print $(NF-4)}' file.csv
在切割是用awk的優勢,你不必指望有多少列你有,你要多少列保持。因爲你想要的是刪除最後4列。
看到測試:
kent$ seq 40|xargs -n10|sed 's/ /, /g'
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
11, 12, 13, 14, 15, 16, 17, 18, 19, 20
21, 22, 23, 24, 25, 26, 27, 28, 29, 30
31, 32, 33, 34, 35, 36, 37, 38, 39, 40
kent$ seq 40|xargs -n10|sed 's/ /, /g' |awk -F, '{for(i=0;++i<=NF-5;)printf $i", ";print $(NF-4)}'
1, 2, 3, 4, 5, 6
11, 12, 13, 14, 15, 16
21, 22, 23, 24, 25, 26
31, 32, 33, 34, 35, 36
這可能會爲你工作(GNU SED):
sed -r 's/(,[^,]*){4}$//' file
在我看來,這裏是最好的答案! –
cat data.csv | rev | cut -d, -f-5 | rev
rev
反轉線,所以它並不重要,如果所有的行具有相同數量的列,它將始終刪除最後4個。這僅適用於最後4列本身不包含任何逗號的情況。
在我看來,這是一個非常不錯的解決方案,+1使用rev(我不知道它存在) – skd
在被黑方式
awk -F, 'OFS=","{for(i=NF; i>=NF-4; --i) {$i=""}}{gsub(",,,,,","",$0);print $0}' temp.txt
awk -F, '{NF-=4; OFS=","; print}' file.csv
或替代地
awk -F, -vOFS=, '{NF-=4;print}' file.csv
將從每行刪除最後一個4列這AWK溶液。
好的方法來刪除額外的列,但對我來說,這取代了列之間的逗號與輸出中的空格。有一種簡單的方法可以避免這種情況,並將它們保留爲逗號? –
你可以用awk -F加上你的分隔符,'{NF- = 4; OFS = 「」;打印}' –
偉大的,這對我有用。也可以在'BEGIN'塊或者''-v'命令行參數中設置'OFS',比如'awk -F,-vOFS =,...' –
- 1. 從powershell中的csv文件中刪除最後一列
- 2. 從bash中的CSV文件的列中刪除空格
- 3. 當4列有空值時從CSV文件中刪除行
- 4. 自動從csv文件中刪除列
- 5. 用bash中的列條件刪除CSV文件中的行
- 6. 從文件bash中刪除最後N行
- 7. 使用Python刪除或刪除CSV文件中的最後一列使用Python
- 8. 從bash文件中刪除文件名
- 9. 從Bash腳本中的CSV文件中刪除括號
- 10. 從bash中的csv文件中刪除第一個逗號
- 11. 合併csv文件但刪除最後一行和多列
- 12. 從csv文件刪除重複的列
- 13. 刪除bash/unix中CSV文件的所有列的空格
- 14. 從csv刪除最後一行
- 15. 從CSV刪除列
- 16. Bash:從文件列表中刪除多個文件
- 17. 以「彙總」信息刪除CSV文件中最後一個行
- 18. bash csv文件列提取和重複數據刪除
- 19. 從文件中刪除單個字 - bash
- 20. Bash從目錄中刪除文件
- 21. 從文件bash中刪除字符串
- 22. Bash:從fasta文件中刪除行
- 23. 從PHP中的CSV文件中刪除最上面一行。
- 24. 從csv文件中刪除重複tweet
- 25. 從更新csv文件中刪除行
- 26. 從CSV文件中刪除行
- 27. 從csv文件中刪除換行
- 28. 從CSV文件中刪除^ M
- 29. 使用python刪除文件中的最後4個字符
- 30. WPF:從綁定列表中刪除最後一項的最有效方法?
在awk行中,我想你要printf $我不打印$ i,對不對?錯字可能?和'打印$我',將不起作用,您可能想要';'另一個錯字? – Kent
@ kent yeah意思是printf $我,你不需要有;如果只有一個命令。 – peteches
你是對的,但你有「逗號」.. :) – Kent