使用awk合并2个文件,同时保留所有列,并根据第1列中的匹配项添加额外的列

丹尼·布莱克

我有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  

但我似乎无法使所有列都与添加的列一起列出。

nu11p01n73R

以下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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

awk以匹配,合并两个文件,同时修改列输入并将额外的列添加到输出文件

根据多个匹配项将一个文件中的列添加到另一个文件中,同时保留不匹配项

awk-根据匹配列合并2个.csv文件

根据一列中的匹配项合并2个CSV文件,而不管标题行

awk合并2列并向txt文件添加一个额外的列

将所有文件 2 与列匹配的文件 1 合并

根据第1列匹配项将csv文件中的行追加到另一个文件中

根据 1 个表中第 1 列和第 2 列之间的匹配进行分组

合并多个文件的列,同时根据不同的列匹配顺序,并为缺失值添加0

根据列合并两个文件,文件1的列中第n个出现的字符串要与第n个出现合并

比较两个文件并在第一个文件中打印匹配项,并添加额外的列

根据列合并数据帧,仅保留第一个匹配项

根据匹配的行合并两个csv文件,并在linux中添加新列

使用awk如何合并2个文件(例如A和B)并执行左外部联接功能,并在两个文件中包括所有列

在合并/合并的Excel文件中添加额外的列

如何合并双行,将所有唯一数据保留在第2列中

在公共列上合并两个文件并使用awk打印所有列

AWK - 匹配字段 1,在同一行中粘贴所有匹配列的字段 2

合并两个csv文件,为所有匹配的记录添加一个带有标志值的列

尽管有其他匹配项,但如果第 2 列缺少一个匹配项,则返回第 1 列

如果使用awk在文件中找到匹配项,则在匹配后打印第“ n”行的第“ m”列

根据另一列的值在 python 文件中添加一个额外的列

awk 不根据两列的匹配合并两个文件

在表中添加2个新列,我得到“列数与第1行的值计数不匹配”

使用 awk 根據第 1 列中的值連接第 2 列中的值

如何根据匹配的列向文件添加列并使用 awk 维护行的顺序

根据第一个文件第一列的所有值合并2个文件

使用awk在匹配的列值上连接2个文件

使用Awk在两个文件中匹配五列