在兩個單獨的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
我用sed
和awk
以獲取這些數據,但已經超出了我對這一挑戰的認識。
在兩個單獨的CSV文件中有共享一個公共IP地址的數據。awk搜索併合並來自2個獨立CSV文件的數據
, 4 ,112.175.173.80 ,TCP ,80
,112.175.173.80, 0, N/A, unknown, unknown
最終結果看起來像這樣:
, 4 ,112.175.173.80 ,TCP ,80, 0, N/A, unknown, unknown
我用sed
和awk
以獲取這些數據,但已經超出了我對這一挑戰的認識。
如果你的目標是要合併這兩個文件,然後join
是你可能會尋找工具。
$ join -t , -1 3 -2 2 "File 1" "File 2"
這就是說:使用','作爲字段分隔符。對於第一個文件,要比較的字段是第三個。第二個文件是第二個文件。第一個文件是「文件1」,第二個文件是「文件2」。
請注意,如果文件中有多行,它們必須按連接鍵字段的排序順序排列。 –
$ 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
這可能爲你工作(GNU SED):
sed -r 's|(,[^,]*)(.*)|/\1/s#$#\2#|' file2 | sed -f - file1 >file3
這將打開文件2成一個sed腳本對文件1運行產生文件3。
IP地址周圍的不規則間距將使得生活比沒有它的時候更加困難。這可以通過預處理階段來解決嗎?另外,在每一行的開始處看到一個空的字段被保留是很有趣的 - 這不是不可能的,只是奇怪的。 –
如果您不同於此,可否編輯您的問題以包含您正在使用的原始數據? – Oli