0
我想比較兩個列表並從一個列表中打印一些列,如果兩個匹配,則打印一些列。我懷疑我很接近,但我想這是最好檢查..比較兩個列表並從每個列表中打印選擇列
一號文件:DATA.TXT
101 0.123
145 0.119
242 0.4
500 0.88
第二個文件:的map.txt
red 1 99
blue 3 101
rob 3 240
ted 7 500
所以,如果我想比較文件2的第3列和文件1的第1列並打印文件2的第1列和文件1的全部,我試過awk 'NR==FNR {a[$3];next}$1 in a{print$0}' file2 file1
但是隻打印file1中的匹配。我嘗試在awk中添加x=$1
。即awk 'NR==FNR {x=$1;a[$3];next}$1 in a{print x $0} file2 file1
,但是隻保存一個值$1
並且每行輸出該值。我也嘗試在a[$3]
中加入1美元,這顯然是錯誤的,從而產生零輸出。
理想情況下,我想獲得這個輸出:
blue 145 0.119
ted 500 0.88
這是文件2的第1列和匹配文件1的第一列文件2的第3列,文件1的其餘部分。
啊哈..我錯過了=在[$ 3] ...我想知道爲什麼在打印沒有工作... – Turtle
@Turtle前添加[$ 1] $ 1 - 你可能想要花點時間真正想想這個解決方案,因爲你顯然認爲如果沒有早期填充它[a [$ 1]'就會以某種方式包含你想要的東西,並且通過在創建數組索引後爲某個不同的變量賦值('a [$ 3]; b = $ 1'),這會以某種方式將變量'b'與'a []'的內容相關聯。 awk中的數組是一個非常常用和強大的工具,在處理更復雜的問題之前,理解這個非常基礎的應用程序非常重要。我建議你獲得Arnold Robbins的第四版Effective Awk Programming。 –