%20%E3%81%AE%E8%AD%98%E5%88%A5%E3%81%8B%E3%82%89%E8%A4%87%E6%95%B0%E3%81%AE%E5%88%97%E3%81%AE%E8%AD%98%E5%88%A5%E3%81%AB%E6%8B%A1%E5%BC%B5%E3%81%99%E3%82%8B.png)
私は Win7 と Cygwin を使用しています。列のペアの一致を識別するために機能するワンライナーがありますが、追加の列 (つまり、2 を超える列) を導入しようとすると、機能しません。そのため、次のコードが機能します。
gawk -F "^" '{ if ($3 == $7) print "0"; else print $3,$7; }' infile.txt > outfile.txt
しかし、別の列のペアを追加すると、構文エラーが発生します。
gawk -F "^" '{ if ($3 == $7 || $3 == $11) print "0"; else print $3,$7,$11; }' infile.txt > outfile.txt
コマンドに何か問題があるようですが、エラー メッセージは私にとってあまり役に立ちません。「||」の代わりに「&&」を使用すると、エラーも発生します (最初の「$7」の直後に「予期しない改行または文字列の終わり」、および「$3 は内部コマンドまたは外部コマンド、操作可能なプログラム、またはバッチ ファイルとして認識されません」)。
次に、列区切り文字として「^」を含む 3 つの行を含む入力ファイルの例を示します。
paris^london^new york^paris^rome^paris
paris^london^munich^paris^rome^paris
paris^london^munich^berlin^rome^paris
ファイルの各行で、列 1、4、および 6 が互いに一致するかどうかを確認できるようにしたいです。この場合、行 1 は「はい」、行 2 は「はい」、行 3 は「いいえ」です。したがって、出力には「はい」の場合は「0」、または「いいえ」の場合は行全体を繰り返す必要があります。したがって、出力は次のようになります。
0
0
paris^london^munich^berlin^rome^paris
何か案は ?
答え1
避け||
て&&
&&
テスト用gawk -F "^" '$3 == $7{if($3 == $11){print "0"; next;}}{print $3,$7,$11}'
||
テスト用gawk -F "^" '$3 == $7{print "0"; next;}$3 == $11{print "0"; next;}{print $3,$7,$11}'
答え2
ようやく分かりました。Win7 で Cygwin を使用しています。一重引用符はダメだったので、すべての一重引用符を二重引用符に置き換えると構文が修正されました。さらに、「||」はダメでしたが、「&&」は問題なく動作します。したがって、次のようになります。
gawk -F "^" "{ if ($1 == $2 && $3 == $4 && $4 == $5 && $5 == $6) print 0; else print $1,$2,$3; }" infile.txt > outfile.txt