【问题标题】:Merging two files by ignoring a line with AWK通过使用 AWK 忽略一行来合并两个文件
【发布时间】:2017-09-29 06:22:15
【问题描述】:

我有两个文件: 文件 1:

a 1 2 3 
b 1 2 3
c 1 2 3
d 1 2 3

文件 2:

hola
l m  n o p q 

现在我想通过忽略文件 2 的标题将它们合并到一个文件中,如下所示:

a 1 2 3 l m n o p q 
b 1 2 3
c 1 2 3
d 1 2 3

有人知道怎么做吗?

【问题讨论】:

    标签: awk merging-data


    【解决方案1】:

    没有awk也可以实现相同的预期输出

    $ cat file1
    a 1 2 3 
    b 1 2 3
    c 1 2 3
    d 1 2 3
    
    $ cat file2
    hola
    l m  n o p q 
    
    $ pr -mtJS' '  file1 <(tail -n +2 file2)
    a 1 2 3  l m  n o p q
    b 1 2 3 
    c 1 2 3 
    d 1 2 3 
    
    $ paste -d ' '  file1 <(tail -n +2 file2)
    a 1 2 3  l m  n o p q 
    b 1 2 3
    c 1 2 3
    d 1 2 3
    

    【讨论】:

    • 不错的解决方案 Akshay。
    【解决方案2】:
    $ awk 'NR==FNR{if(NR>1)a[NR-1]=$0;next}{print $0,a[FNR]}' file2 file1
    a 1 2 3 l m  n o p q 
    b 1 2 3
    c 1 2 3
    d 1 2 3
    

    简要说明,

    • NR==FNR{if(NR&gt;1)a[NR-1]=$0;next}:在file2中,省略头部,从第二条记录保存到a[NR-1]。 注意:随着 file2 中的行长大,这也可以工作
    • print $0,a[FNR]:打印file1中$0的内容和a[FNR]的组合。 FNR 将是 file1 中的记录号。

    【讨论】:

    • 谢谢!它有效,但在我的输出中我看到 3l。 3 和 l 之间没有空格。
    • @wara,看看我的修改。这应该在 3 和 l 之间有一个空格。
    • 我已经通过添加“\t”解决了这个问题,这里是'="\t"$0;next'
    猜你喜欢
    • 2016-07-30
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多