通过忽略 AWK 的一行来合并两个文件
Merging two files by ignoring a line with AWK
我有两个文件:
文件 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 的 header 将它们合并到一个文件中,如下所示:
a 1 2 3 l m n o p q
b 1 2 3
c 1 2 3
d 1 2 3
有人知道怎么做吗?
$ awk 'NR==FNR{if(NR>1)a[NR-1]=[=10=];next}{print [=10=],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>1)a[NR-1]=[=11=];next}
:在file2中,省略表头,从第二条记录保存到[NR-1]。 注意:随着 file2 中行的增长,这也可以工作
print [=12=],a[FNR]
:打印file1中$0的内容和a[FNR]的组合。 FNR 将是文件 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
我有两个文件: 文件 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 的 header 将它们合并到一个文件中,如下所示:
a 1 2 3 l m n o p q
b 1 2 3
c 1 2 3
d 1 2 3
有人知道怎么做吗?
$ awk 'NR==FNR{if(NR>1)a[NR-1]=[=10=];next}{print [=10=],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>1)a[NR-1]=[=11=];next}
:在file2中,省略表头,从第二条记录保存到[NR-1]。 注意:随着 file2 中行的增长,这也可以工作print [=12=],a[FNR]
:打印file1中$0的内容和a[FNR]的组合。 FNR 将是文件 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