【问题标题】:Matching two fields between two files AWK匹配两个文件之间的两个字段 AWK
【发布时间】:2016-12-09 14:19:47
【问题描述】:

试图将字段 1,3 与另一个文件中的字段 1,2 匹配并打印第二个文件的行。第一个文件是制表符分隔的,第二个是 csv 分隔的。意外的令牌错误?
文件1

1 x 12345 x x x

文件2

1,12345,x,x,x

脚本

awk -F',' FNR==NR{a[$1]=$1,$3; next} ($1,$2 in a) {print}' file1 file2 > output.txt

【问题讨论】:

    标签: awk


    【解决方案1】:

    你几乎成功了!

    awk 'NR==FNR{first[$1]=$3;next} $1 in first{if(first[$1]==$2){print}}' file1 FS="," file2
    

    输出

    1,12345,x,x,x
    

    备注

    1. 由于两个文件的字段分隔符不同,我们在文件之间进行了更改。
    2. 此脚本假设每个文件的第一个字段是唯一的,否则脚本会中断

    在文件之间查看[ switching field separator ]

    【讨论】:

    • FS的切换很优雅。 ;)
    • 我借用了[ this ]答案的技术。
    • 仍然有问题...我需要添加 -F',' 参数吗?
    • @mxttgen31 有什么问题?您能否添加更多示例输入和预期输出?
    • FS="," 做到了!谢谢!
    【解决方案2】:

    同样的想法,但不取决于第一个字段的唯一性,而是取决于对

    $ awk 'NR==FNR{a[$1,$3]; next} ($1,$2) in a' file1 FS=, file2
    
    1,12345,x,x,x
    

    【讨论】:

    • 打败我 ++ ;)
    • ^1 文件之间设置FS的好用处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    相关资源
    最近更新 更多