2013-04-25 46 views
2

我有兩個文件一個包含服務器名稱和IP,另一個包含服務器名稱和計算機名稱,例如。這些文件沒有真正的順序。我曾嘗試使用Sort,awk和sed的變體。但第一個文件不能很好地維護,並且包含的​​假數據會抵消我打算如何做這件事。查找兩個文件之間的第一列的匹配模式,並從第三個文件中的每個文件打印行

我試圖基本上模式匹配兩個文件中包含在兩行中的服務器的兩個文件,並在第三個文件中的一行中的兩行文件中的行中打印數據。

文件1:

Server1 10.10.10.1 
Server2 10.10.10.2 
.... 
Server154 10.10.30.8 
Server155 10.10.30.9 

文件2:

Server1 site site1 
Server2 site site2 
.... 
Server154 site site154 
Server155 site site155 

輸出:

Server1 10.10.10.1 site site1 
Server2 10.10.10.2 site site2 
... 
Server154 10.10.30.8 site site154 
Server155 10.10.30.9 site site155 

回答

3

這應該做的伎倆:

$ awk 'FNR==NR{a[$1]=$0;next}($1 in a){print a[$1],$2,$3}' file1 file2 
Server1 10.10.10.1 site site1 
Server2 10.10.10.2 site site2 
Server154 10.10.30.8 site site154 
Server155 10.10.30.9 site site155 
+1

工作完美。非常感謝 – GenericUser 2013-04-25 12:31:14

+1

耶他們顯然是他們的一個計時器,我不得不等待2分鐘才能讓我,你只是快速。 :D – GenericUser 2013-04-25 12:36:33

-1

可以通過使用BEGIN中的第一個文件填充數組,然後再次匹配該數組中的第二個文件來解決。

awk -v f1="file1.txt" 'BEGIN { while (getline < f1) { keys[$1]=$2 } ; close(f1) } 
    keys[$1] { print }' file2.txt 
+0

這不會產生所需的輸出,並且'getline','BEGIN'和'-v'的使用是不好的做法。 – 2013-04-25 12:34:53

+0

請詳細說明 – sastorsl 2013-05-06 09:16:39

+0

所有這些工作都是在'file2'中打印行,如果第一個字段在'file1'中也找不到輸出。 Getline - > http://awk.info/?tip/getline – 2013-05-06 09:30:14

相關問題