2013-08-21 44 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。