awk コマンドは、最初の列の値を 1 として出力します。

awk コマンドは、最初の列の値を 1 として出力します。

列 5 の値が使用可能で、列 1 と 2 が同じで列 3 と 4 が同じ場合、列 1 と 5 を印刷しようとします。上記の場合は、次のコマンドを使用します。

awk 'length($5) && $1=$2 && $3=$4 {print $1" "$5}' filename

以下は、次の内容を含む私のファイルです。

343 222 222 333 333 test
565 444 444 555 555 testi
234 121 121 454 454 
345 676 676 343 343 testin

しかし、私が得た最初の列の値は1で、出力は次のようになります。

1 test
1 testi
1 testin

私のコマンドには3つの条件がありますが、2つの条件を使用すると正常に動作します。誰もが私が1の結果を得る理由と解決策を説明できますか?

ベストアンサー1

=それは職業です。値を比較するために使用されます==1あなたはそれを本質的に所有しているのでそれを得ます$1 = ($2 && $3 = $4)

awk 'NF == 5 && $1 == $2 && $3 == $4 { print $1, $5 }' filename

また、データには4つまたは5つではなく5つまたは6つの列が含まれているため

$ awk 'NF == 6 && $2 == $3 && $4 == $5 { print $1, $6 }' filename
343 test
565 testi
345 testin

NFawk現在のレコードのフィールド数を含む変数です。デフォルトの出力区切り記号(OFS)はスペースであるため、明示的にスペースを印刷する必要はありませんprint

また、明示的なスペースを印刷するには、次のように読みやすくなります。

print $1 " " $6

代わりに

print $1" "$6

awk変数と文字列の値が順番に表示されるときに連結します。変数と文字列の間のスペースは重要ではありません。

おすすめ記事