したがって、awk
を使用してcomm出力の最初の列を取得しようとしています。 Tabがcommのセパレータとして使用されたことを読んだので、次のようにしました。
awk -F"\t" '{print $1}' comm-result.txt
以下の出力を含むcomm-result.txtを使用
comm -3 file1 file2
しかし、これはうまくいかないようです。
この表彰では、区切り文字としてスペース文字も使用します。ファイルに複数のスペースが含まれていると、奇妙な結果になります。
comm
から最初の列のみを取得するにはどうすればよいですか?
「だから、通信出力の最初の列を取得しようとしています」
「comm file1 file2
」出力の最初の列には、file1
に固有の行が含まれています。 -2
(file2
に固有の行を非表示)および-3
(両方のファイルに表示される行を非表示)でcomm
を呼び出すだけで、後処理をスキップできます。
comm -2 -3 file1 file2 # will show only lines unique to file1
ただし、comm
の事前実行出力を処理する以外に選択肢がない場合は、 Carl言及 のように、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
cut(1)
は、おそらくこの問題に対してawk
よりも良い選択です。
comm
を-2
および-3
とともに使用することができます( 既に説明済み として)、またはcomm
をgrep
とともに使用する場合:
grep -o '^\S\+' <(comm file1 file2)
そのため、出力には末尾のスペースが含まれません。これは、comm
以外のコマンドに役立ちます。