入力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:最初の4列でCSVファイルをソート
- 3. bashのファイルから文字列を削除する方法
- 4. Pythonを使用してCSVファイルの最後の列を削除または削除
- 5. CSVファイルを追加する際に最後の行を削除する
- 6. R最後の単語を文字列から削除する
- 7. 文字列から最後の文字を削除する(Python)
- 8. bashの各行の最後の単語を削除する
- 9. ファイルの最後の列を削除するPythonスクリプト
- 10. Bashのgetopts最後の引数を削除する
- 11. Pythonの巨大なcsvファイルから行を削除する
- 12. CSVファイルの日付からタイムスタンプを削除する
- 13. Bashでファイル名からハイフンを削除する
- 14. Javaでタブ付きの列csvファイルを削除する方法
- 15. csvファイルの行(NOT列)を削除する方法
- 16. fwrite中に.txtファイルから最後の段落を削除する
- 17. PHP:大きなファイルから最後のNバイトを削除するには?
- 18. Regex - すべてのマッチを最後から削除する
- 19. 文字列から最後の単語を削除するSQL Serverクエリ
- 20. 最後の文字を文字列から削除する方法
- 21. csvからテーブルにmysqlを挿入する - 最初の行を削除する
- 22. 最後の文字を入力から削除する
- 23. NSMutableStringから最後の文字を削除する
- 24. csvファイルの最初の行を削除するmysqlデータベースにアップロードする
- 25. PHP - ファイルの最後の文字を削除する
- 26. Rubyでファイルの最後の行を削除するには?
- 27. windowsバッチ:ファイル名の最後の "d"を削除する
- 28. UILabelから最後の値を削除しますか?
- 29. 文字列の最後の文字を削除する$ variable
- 30. 文字列の最後の文字を削除する
awk行では、printf $ iは$ iを印刷しないと思いますか?おそらくタイプミス? 'print $ i 'がうまくいかない場合は、'; 'をもう一度打ちたいでしょうか? – Kent
@kent yeahはprintf $ iを意味しています。 1つのコマンドだけの場合 – peteches
あなたは正しいですが、あなたは "コンマ"を持っています.. :) – Kent