29

だから私はを使用して通信出力の最初の列を取得しようとしていますawk。Tab が comm のセパレーターとして使用されていることを読んだので、次のようにしました。

awk -F"\t" '{print $1}' comm-result.txt

次の出力を含む comm-result.txt を使用します。

comm -3 file1 file2

しかし、これはうまくいかないようです。

このコマンドはスペース文字もセパレーターとして使用し、ファイルに複数のスペースが含まれていると奇妙な結果になります。

から最初の列のみを取得するにはどうすればよいcommですか?

4

3 に答える 3

35

「それで、通信出力の最初の列を取得しようとしています」

" " 出力の最初の列には、 にcomm file1 file2固有の行が含まれていfile1ます。(に固有の行を抑制する) とcomm(両方のファイルに表示される行を抑制する) で呼び出すだけで、後処理をスキップできます。-2file2-3

comm -2 -3 file1 file2   # will show only lines unique to file1

ただし、カールが述べたようにcomm、実行前の出力を処理するしかない場合は、オプションになります。cut

cut -f1 comm-results.txt

ただし、これにより、列 1 が空の場合は行が空になります。これに対処するには、おそらくawkより適切な場合があります。

awk -F"\t" '{if ($1) print $1}' comm-results.txt
     ----    ----------------
      |                     |
   Use tab as delimiter     |
                            +-- only print if not empty
于 2011-11-28T17:18:20.047 に答える
8

cut(1)おそらく、awkこの問題よりも良い選択です。

于 2011-11-28T17:12:36.587 に答える