web-dev-qa-db-ja.com

csvの列をカットする方法

私はcsvファイルのセット(約250)を持っており、それぞれに300から500のレコードがあります。各ファイルから2つまたは3つの列を切り取り、別のファイルに保存する必要があります。私はbuntu OSを使用しています。コマンドまたはユーティリティでそれを行う方法はありますか?

20
ArK

フィールド内で列区切り文字が発生しないことがわかっている場合は、cutを使用できます。

$ cat in.csv
foo,bar,baz
qux,quux,quuux
$ cut -d, -f2,3 < in.csv 
bar,baz
quux,quuux

Shellビルトインの「for」を使用して、すべての入力ファイルをループできます。

28
lutz

フィールドに区切り文字が含まれている可能性がある場合は、CSVファイルを解析できるライブラリを見つける必要があります。通常、汎用スクリプト言語には、標準ライブラリにCSVモジュールが含まれています。

Ruby:   require 'csv'
Python: import csv
Perl:   use Text::ParseWords;
11
glenn jackman

フィールドにコンマまたは改行が含まれている場合は、私が作成したヘルパープログラムを使用して、cut(およびその他のUNIXテキスト処理ツール)がデータを適切に処理できるようにすることができます。

https://github.com/dbro/csvquote

このプログラムは、引用符で囲まれたフィールド内の特殊文字を検索し、カットプログラムを混乱させないように、一時的に非印刷文字に置き換えます。その後、カットが行われた後、それらは復元されます。

lutzのソリューションは次のようになります。

csvquote in.csv | cut -d, -f2,3 | csvquote -u 
9
D Bro

ssconvertを使用してCSVを取得した場合は、次のことを試してください。

ssconvert -O 'separator="|"' "file.xls" "file.txt"

代わりに[〜#〜] txt [〜#〜]拡張子[〜#〜] csv [〜 #〜]、この方法では、Gnumeric_stf:stf_csvの代わりにGnumeric_stf:stf_assistantエクスポーターを使用します、オプションを使用できるようにします(-Oパラメータ)。それ以外の場合は、ファイルセーバーはオプションエラーを取りません。パイプ文字の可能性ははるかに低いですが、前に確認することをお勧めします。

次に、名前を変更して、次のような操作を行うことができます。

cat file.csv | cut -d "|" -f3 | sort | uniq -c | sort -rn | head
0
Pablo Bianchi