2015-05-09 29 views
2

我想用awk打印包含在一個文件2中的行,如果列1或5中的數字在file1中,但我得到語法錯誤我不明白。當使用awk比較兩個文件時文件名的語法錯誤

我輸入的是:

file1.dat

1 
3 
4 
6 
8 
13 
14 
25 

etc... 

File2.DAT的

2 GLU 1 - 3 ARG 2 
24 ASP 2 - 12 LYS 1 
3 ASP 1 - 25 ARG 2 
7 LYS 2 - 17 GLU 2 
18 ARG 1 - 13 GLU 2 

etc... 

在這種情況下,我想

2 GLU 1 - 3 ARG 2 
3 ASP 1 - 25 ARG 2 
18 ARG 1 - 13 GLU 2 

我試圖做輸出這與以下awk線

awk -F 'NR==FNR{a[$1||$5]++;next} (a[$1||$5])' file1.dat file2.dat 

,但我得到的錯誤

awk: file1.dat 
awk:  ^syntax error 

有誰知道是什麼原因造成這個錯誤?我試圖將文件名稱放入變量中,但會產生相同的錯誤。

+1

我不確定腳本(或算法)如何工作,但語法錯誤是由於將「file1.dat」視爲awk代碼,因爲實際的awk代碼被視爲「輸入字段分隔符」 F。如果你刪除了-F,這個特定的語法錯誤可能會消失,但不知道你是否會得到所需的輸出。 – Prem

回答

3

您提供了字段分隔符的-F標誌。下一個參數是字段分隔符(這是你的腳本,因爲你沒有提供分隔符)。所以awk將第一個文件作爲腳本本身。

嘗試刪除-F或添加分隔符,例如awk -F '[ \t]*' '...' file1 file2