入力CSVファイルの最後の4列を削除するためにbashを使用する方法はありますか?最後の4つの列は、行ごとに長さが異なるフィールドを持つことができるため、各行の末尾から特定の文字数を削除するだけでは不十分です。csvファイルから最後の4列を削除するbashメソッド
答えて
Cutは、すべての行に同じ数のフィールドがある場合や、そうでない場合はawkを使用するとこれを行うことができます。あなたは--output-区切り出力seperaterの使用を制御したい場合はフィールドの数-4とプリント番目まで
cut -d, -f1-6 # assuming 10 fields
は、フィールド上の文字列=
awk -F , -v OFS=, '{ for (i=1;i<=NF-4;i++){ printf $i, }; printf "\n"}'
ループの最初の6つのフィールドを出力しますそれらを出す。
カラムの数が分かっている場合は、cut
を使用できます。
cut -d',' -f -5
はしかし、これは任意のカンマが含まれていない、あなたのCSVファイルのデータを前提としています、あなたのファイルが9列があり、たとえば、コンマはあなたの区切り文字です。 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回転の使用のために+1です(私はそれが存在するかどうかはわかりませんでした) – 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
ハッキングされた方法でこのAWK溶液を各ラインから最後の4つの列を削除します。
余分な列を削除するには良い方法ですが、これは出力の空白と列の間のカンマを置き換えます。それを避け、カンマでそれらを維持する簡単な方法はありますか? –
区切り文字をawk -F、 '{NF- = 4; OFS = "、"; print} ' –
偉大な、それは私のために働く。 'BEGIN'ブロックや' -v'コマンドライン引数で 'awk -F、-vOFS =、...'のように 'OFS'を設定することもできます –
- 1. CSVファイルから最後の行を削除する
- 2. bashのCSV最後の列
- 3. Bash:最初の4列でCSVファイルをソート
- 4. csvファイルから行を削除する
- 5. CSVファイルの最後の空白行を削除します
- 6. bashのファイルから文字列を削除する方法
- 7. Powershell - CSVファイルの列から空白を削除する
- 8. CSVファイルから空の行や列を削除する - C#
- 9. 正規表現を使用してCSVファイルから最後の行を含む「文字列」を削除する
- 10. ファイルbashツールから列を削除する
- 11. 最後にCSVファイル行が削除される
- 12. Bash Regex:ファイル名からcharctersを削除
- 13. 最後の日から古いファイルを削除するgsutilコマンド
- 14. ファイルから最後の空白行を削除する
- 15. 4列のcsvファイルからのヒストグラム
- 16. データフレームの最後から文字を削除する列の値
- 17. Pythonを使用してCSVファイルの最後の列を削除または削除
- 18. CSVファイルからの文字の削除
- 19. 文字列から最後の文字を削除する(Python)
- 20. R最後の単語を文字列から削除する
- 21. CSVファイルを追加する際に最後の行を削除する
- 22. sqlplusスプールから作成されたcsvファイルから最後の行を削除するWindowsバッチコマンド
- 23. bashの各行の最後の単語を削除する
- 24. Bashのgetopts最後の引数を削除する
- 25. 最初の列を削除して配列にcsvファイルを格納する[Python]
- 26. ファイルの最後の列を削除するPythonスクリプト
- 27. AIX:ファイルから最後のシンボル(CRLF)を削除します。
- 28. bash変数から接尾辞(.csv)を削除
- 29. リストビューから最後の行を削除
- 30. JSON文字列から最後のコンマを削除します。
awk行では、printf $ iは$ iを印刷しないと思いますか?おそらくタイプミス? 'print $ i 'がうまくいかない場合は、'; 'をもう一度打ちたいでしょうか? – Kent
@kent yeahはprintf $ iを意味しています。 1つのコマンドだけの場合 – peteches
あなたは正しいですが、あなたは "コンマ"を持っています.. :) – Kent