在awk
下面,我試圖匹配file1
中的每行到file2
中的一行。如果在兩個文件之間沒有找到匹配,則打印值file1
後面跟着unknown
。在第一個awk
中,我收到else
語句附近的Synatax錯誤,第二個語法爲next
。我不確定爲什麼語法錯誤需要else
來捕獲unknown
條件,next
告訴awk
要處理下一行,對不對,或者我誤以爲是在思考?這兩個文件都是space-delimited
,謝謝:)。awk打印匹配行或「未知」如果不匹配
file1的
A2M
A4GALT
A4GNT
ABC34
file2的
A2M AD
ABC34 AD/AR
期望的輸出
A2M AD
A4GALT unknown
A4GNT unknown
ABC34 AD/AR
AWK
awk 'NR==FNR{A[$1];next}$1 in A else { print "unknown" }' file1 file2
awk 'BEGIN{FS=OFS="\t"} # define field and output seperators
FNR==NR{ # process each field in line of `file1`
for (i=1; i <= n; i++) { # execute loop
d[$1] = $1 # match first element and read into key d
}
}
next # process next line
}{print $1, ($1 in d?d[$1]:"unknown")}' file1 file2 # if no match
print $1 followed by unknown
你有一個語法錯誤,因爲你的報價是不平衡的。嘗試將你的awk代碼移動到一個文件中 - 關於awk的一個鮮爲人知的事實是,你可以像使用任何其他編程語言一樣將你的代碼放在一個文件中,你不需要把它全部用單行來完成。 –
如果這個事實「鮮爲人知」,我會感到驚訝,它正好位於每個awk手冊頁,書和POSIX規範的頂部/前面,並且經常在這裏和其他論壇的答案中使用。 –