我有2千行文件。每个文件的第一列都填充有IP地址。我想合并这两个文件,将两个文件的所有列都写入第三个文件。我还想向文件添加标题。更加困难的是...如果文件1中的IP位于文件2中,则只需合并这些行,否则合并这些行并在其中添加带有“添加”的新列,但是如果文件2中的IP不匹配的文件1,然后在新列中添加“删除”。
文件1扫描仪输出
Column 1 Column 2 Column 3 column 4
10.1.10.5 nuts.com 2214.53 9/19/2014
10.1.10.8 sites.net 7233.55 10/24/2010
10.1.25.6 7611.76 1/24/2010
10.1.25.7 nobb.com 000.00 9/19/2010
文件2内部IP列表
Column 1 Column 2
10.1.10.2 001 T & R
10.1.10.3 001 T & R
10.1.25.6 022 office
10.1.25.7 022 office
所需的输出
文件3
Column 1 Column 2 Column 3 column 4 column 5 column 6
10.1.10.2 001 T & R add
10.1.10.3 001 T & R add
10.1.10.5 nuts.com 2214.53 9/19/2014 delete
10.1.10.8 sites.net 7233.55 10/24/2010 delete
10.1.25.6 7611.76 1/24/2010 022 office
10.1.25.7 nobb.com 000.00 9/19/2010 022 office
我已经做到了这一点
awk -F, 'NR==FNR{a[$1]=$2;next} !($1 in a) {$5="Delete"}1 ' OFS="," ipinput.csv scaninput.csv
但我似乎无法使所有列都与添加的列一起列出。
以下awk脚本可以为您提供帮助
awk 'BEGIN{FS=OFS="|"} NR==FNR{ip[$1]=$2"|"$3"|"$4} NR!=FNR{if ( $1 in ip) { print $1,ip[$1],$2,"null"; delete ip[$1];} else print $1,"null|null|null",$2,"add" } END{for ( i in ip ) print i, ip[i],"delete" } '
输出为
10.1.10.2 |null|null|null| 001 T & R|add
10.1.10.3 |null|null|null| 001 T & R|add
10.1.25.6 | null field | 7611.76 | 1/24/2010| 022 office|null
10.1.25.7 | nobb.com | 000.00 | 9/19/2010| 022 office|null
10.1.10.5 | nuts.com | 2214.53 |9/19/2014|delete
10.1.10.8 | sites.net | 7233.55 |10/24/2010|delete
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句