オペレーティングシステム:OSX方法:コマンドラインから、sed、cut、gawkを使用します。
基本的に、csvファイルの最初の列を取得して、それを新しいファイルに解析しようとしています。
入力ファイルの例
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
欲望の出力
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
EXAMPLE4
だから私は最初の列が欲しい。
これが私がこれまでに試したことです:
awk -F"," '{print $1}' in.csv > out.txt
awk -F"," '{for (i=2;i<=NF;i++)}' in.csv > out.txt
awk -F"," 'BEGIN { OFS="," }' '{print $1}' in.csv > out.txt
cat in.csv | cut -d \, -f 1 > out.txt
最初の行だけを印刷するか、まったく印刷しないかのどちらかで動作するようには見えないため、1行ずつ読み取ることができないと思います。
あなたの最後のオプションは私にとって完璧に機能します:
$ cat > in.csv # Then pasted the example input followed by Ctrl+D:
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
[Ctrl+D]
$ cat in.csv | cut -d, -f1
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
EXAMPLE4
たぶん、ここで行末があなたを噛んでいますか?ファイルにDOSスタイルまたは古いMacスタイルの行末がある場合、これは奇妙な動作を引き起こす可能性があります。 file in.csv
を実行して、どのような結果になるかを確認してください。
$ file in.unix.csv
in.unix.csv: ASCII text
$ file in.dos.csv
in.dos.csv: ASCII text, with CRLF line terminators
後者の場合は、dos2unix
ツールを使用してファイルを変換します。
編集:OS Xでは flip
があなたの望むものです のようです。
サンプル入力をコピーして貼り付け、in.csvとして保存してから、最初の行を実行しました。
awk -F"," '{print $1}' in.csv > out.txt
そしてそれは次のように完璧に機能しました:
$ emacs in.csv
$ cat in.csv
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
$ awk -F"," '{print $1}' in.csv > out.txt
$ cat out.txt
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
これはOS X 10.5のTerminal.appにあります
私にとって、カットは期待される結果をもたらします:
cut -d, -f1 < in.csv > out.txt
Perlがオプションの場合:
Perl -F, -lane 'print $F[0]' in.csv > out.txt
次のコマンドラインオプションが使用されます。
-n
入力ファイルのすべての行をループします-l
は、処理前に改行を削除し、後で元に戻します-a
autosplitモード–入力行を@F
配列に分割します。デフォルトでは空白で分割されます。-e
Perlコードを実行する-F
autosplit modifier、この場合は,
で分割されます@F
は、$F[0]
で始まるインデックスが付けられた、各行の単語の配列です。