2013-08-21 67 views
0

在兩個單獨的CSV文件中有共享一個公共IP地址的數據。awk搜索併合並來自2個獨立CSV文件的數據

  • 文件1:, 4 ,112.175.173.80 ,TCP ,80
  • 文件2:,112.175.173.80, 0, N/A, unknown, unknown

最終結果看起來像這樣:

  • 文件3:, 4 ,112.175.173.80 ,TCP ,80, 0, N/A, unknown, unknown

我用sedawk以獲取這些數據,但已經超出了我對這一挑戰的認識。

+1

IP地址周圍的不規則間距將使得生活比沒有它的時候更加困難。這可以通過預處理階段來解決嗎?另外,在每一行的開始處看到一個空的字段被保留是很有趣的 - 這不是不可能的,只是奇怪的。 –

+1

如果您不同於此,可否編輯您的問題以包含您正在使用的原始數據? – Oli

回答

1

如果你的目標是要合併這兩個文件,然後join是你可能會尋找工具。

$ join -t , -1 3 -2 2 "File 1" "File 2" 

這就是說:使用','作爲字段分隔符。對於第一個文件,要比較的字段是第三個。第二個文件是第二個文件。第一個文件是「文件1」,第二個文件是「文件2」。

+0

請注意,如果文件中有多行,它們必須按連接鍵字段的排序順序排列。 –

0
$ cat file1 
, 4 ,112.175.173.80 ,TCP ,80 
$ 
$ cat file2 
,112.175.173.80, 0, N/A, unknown, unknown 
$ 
$ awk -F' *, *' -v OFS=", " 'NR==FNR{a[$2]=$3 OFS $4 OFS $5 OFS $6; next} {print $0, a[$3]}' file2 file1 
, 4 ,112.175.173.80 ,TCP ,80, 0, N/A, unknown, unknown 
0

這可能爲你工作(GNU SED):

sed -r 's|(,[^,]*)(.*)|/\1/s#$#\2#|' file2 | sed -f - file1 >file3 

這將打開文件2成一個sed腳本對文件1運行產生文件3。