
我使用的是 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 不被識別為內部或外部命令、可操作程序或批次檔”)。
這是一個範例輸入文件,包含三行,並以“^”作為列分隔符號:
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