私はcsvファイルのセット(約250)を持っており、それぞれに300から500のレコードがあります。各ファイルから2つまたは3つの列を切り取り、別のファイルに保存する必要があります。私はbuntu OSを使用しています。コマンドまたはユーティリティでそれを行う方法はありますか?
フィールド内で列区切り文字が発生しないことがわかっている場合は、cutを使用できます。
$ cat in.csv
foo,bar,baz
qux,quux,quuux
$ cut -d, -f2,3 < in.csv
bar,baz
quux,quuux
Shellビルトインの「for」を使用して、すべての入力ファイルをループできます。
フィールドに区切り文字が含まれている可能性がある場合は、CSVファイルを解析できるライブラリを見つける必要があります。通常、汎用スクリプト言語には、標準ライブラリにCSVモジュールが含まれています。
Ruby: require 'csv'
Python: import csv
Perl: use Text::ParseWords;
フィールドにコンマまたは改行が含まれている場合は、私が作成したヘルパープログラムを使用して、cut(およびその他のUNIXテキスト処理ツール)がデータを適切に処理できるようにすることができます。
https://github.com/dbro/csvquote
このプログラムは、引用符で囲まれたフィールド内の特殊文字を検索し、カットプログラムを混乱させないように、一時的に非印刷文字に置き換えます。その後、カットが行われた後、それらは復元されます。
lutzのソリューションは次のようになります。
csvquote in.csv | cut -d, -f2,3 | csvquote -u
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
-O 'eol=unix separator=; format=preserve charset=UTF-8 locale=en_US transliterate-mode=transliterate quoting-mode=never'
。ssconvert
manページ 。