44

オペレーティングシステム: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

最初の行を印刷するだけか、まったく印刷しないかのどちらかで、何も機能していないようです。したがって、行ごとに読み取ることができないと思います。

4

4 に答える 4

51

あなたの最後のオプションは私にとって完璧に機能します:

$ 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はあなたが望むもののようです。

于 2010-04-16T11:33:34.043 に答える
15

サンプル入力をコピーして貼り付け、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

これはOSX10.5のTerminal.appにあります

于 2010-04-16T11:32:22.110 に答える
7

私にとって、カットは期待される結果を生み出します:

cut -d, -f1 < in.csv > out.txt
于 2010-04-16T11:32:39.783 に答える
1

Perlがオプションの場合:

perl -F, -lane 'print $F[0]' in.csv > out.txt

次のコマンドラインオプションが使用されます。

  • -n入力ファイルのすべての行をループします
  • -l処理前に改行を削除し、後で追加し直します
  • -a自動分割モード–入力行を@F配列に分割します。デフォルトは空白で分割します。
  • -ePerlコードを実行します
  • -Fautosplit修飾子、この場合は分割されます,

@Fは、各行の単語の配列であり、$F[0]

于 2015-11-13T22:30:43.330 に答える