列 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
NF
awk
現在のレコードのフィールド数を含む変数です。デフォルトの出力区切り記号(OFS
)はスペースであるため、明示的にスペースを印刷する必要はありませんprint
。
また、明示的なスペースを印刷するには、次のように読みやすくなります。
print $1 " " $6
代わりに
print $1" "$6
awk
変数と文字列の値が順番に表示されるときに連結します。変数と文字列の間のスペースは重要ではありません。