在两个单独的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