awk搜索并合并来自2个单独CSV文件的数据

时间:2013-08-21 20:55:56

标签: bash shell scripting sed awk

两个单独的CSV文件中有数据共享一个公共IP地址。

  • 文件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来获取这些数据,但是我已经超出了我对这一挑战的了解。

3 个答案:

答案 0 :(得分:1)

如果你的目标是合并两个文件,那么join就是你可能正在寻找的工具。

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

那说:使用','作为字段分隔符。对于第一个文件,要比较的字段是第三个。第二个文件是第二个。第一个文件是“文件1”,第二个文件是“文件2”。

答案 1 :(得分: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

答案 2 :(得分:0)

这可能适合你(GNU sed):

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

这会将file2转换为sed脚本,以针对file1运行以生成file3。