Linux awk合并了两个文件

前端之家收集整理的这篇文章主要介绍了Linux awk合并了两个文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有下面的脚本来组合两个文件.

awk -F"\t" '
    {key = $1}
    !(key in result) {result[key] = $0; next;}
    { for (i=2; i <= NF; i++) result[key] = result[key] FS $i }
    END {
        PROCINFO["sorted_in"] = "@ind_str_asc"    # if using GNU awk
        for (key in result) print result[key]
    }
' $1 $2 > $3 

第一列是关键,$1和$2.
但是如果$2列有一个键但是$1列没有键.

然后它除了1美元行之外还要合并.

我想结合只有1美元的钥匙存在.
我怎样才能简单地合并这两个文件

例如,

档案1

Key    Column1  Column2  Column3  
Test1    500     400     200               
Test2    499     400     200               
Test5    600     200     150               
Test6    600     199     150               
Test7    599     199     100               

文件2

Key    Column4   Column5
Test1    Good     Good                    
Test2    Good     Good
Test3    Good     Good                    
Test4    Good     Good
Test5    Good     Good                    
Test6    Good     Good
Test7    Good     Good

目前的组合

Key    Column1  Column2  Column3  Column4   Column5
Test1    500     400     200       Good     Good     
Test2    499     400     200       Good     Good      
Test5    600     200     150       Good     Good          
Test6    600     199     150       Good     Good          
Test7    599     199     100       Good     Good  
Test3    Good    Good  
Test4    Good    Good  

预期结合.

Key    Column1  Column2  Column3  Column4   Column5
Test1    500     400     200       Good     Good     
Test2    499     400     200       Good     Good      
Test5    600     200     150       Good     Good          
Test6    600     199     150       Good     Good          
Test7    599     199     100       Good     Good 

谢谢!

最佳答案
你错了.您所描述的是一个连接操作,并且有一个非常好的UNIX工具,其名称非常明显:

$join file1 file2 | column -t
Key    Column1  Column2  Column3  Column4  Column5
Test1  500      400      200      Good     Good
Test2  499      400      200      Good     Good
Test5  600      200      150      Good     Good
Test6  600      199      150      Good     Good
Test7  599      199      100      Good     Good

或者如果你坚持使用awk:

$awk 'NR==FNR{m[$1]=$2" "$3; next} {print $0,m[$1]}' file2 file1 | column -t
Key    Column1  Column2  Column3  Column4  Column5
Test1  500      400      200      Good     Good
Test2  499      400      200      Good     Good
Test5  600      200      150      Good     Good
Test6  600      199      150      Good     Good
Test7  599      199      100      Good     Good
原文链接:https://www.f2er.com/linux/440537.html

猜你在找的Linux相关文章