我想用a.com的第3列,第4列和第5列替换b.com的第6列,第7列和第8列以获取特定行。
awk 'NR==FNR{a[NR]=$6;next}FNR>5&&FNR<5287{$3=a[FNR]}1' b.com a.com
- 一次只能替换一列。我可以修改此命令,以便它将替换所有三列吗?
例如: -
a.com:
a b 1 2 3 4
c d 3 2 1 4
b.com:
a d e f k 3 4 5 l
p q w e g 5 4 3 m
期望的输出:
a b 3 4 5 4
c d 5 4 3 4
答案 0 :(得分:2)
awk 'NR==FNR {fld6[NR]=$6; fld7[NR]=$7; fld8[NR]=$8; next}
FNR>5 && FNR<5287 {$3=fld6[FNR]; $4=fld7[FNR]; $5=fld8[FNR]}1' b.com a.com
<强>逻辑:强>
b.com
存储到以行号a.com
中达到相似的行后,您可以通过引用该数组替换b.com
中的列。FNR>5 && FNR<5287
这是为了修改这些特定的行。对于每一行,您都可以删除此<强>测试强>
$ cat a.com
a b 1 2 3 4
c d 3 2 1 4
$ cat b.com
a d e f k 3 4 5 l
p q w e g 5 4 3 m
$ awk 'NR==FNR {fld6[NR]=$6; fld7[NR]=$7; fld8[NR]=$8; next}
{$3=fld6[FNR]; $4=fld7[FNR]; $5=fld8[FNR]}1' b.com a.com
a b 3 4 5 4
c d 5 4 3 4
答案 1 :(得分:0)
我首先使用paste然后使用awk。
paste a.com b.com > c.com
此命令将a.com和b.com作为相邻列放在新文件中。
然后到awk部分,
awk '{print $3,$4,$5,$10,$11,$12}' c.com
(你必须根据a.com中实际有多少列来清理它
作为一个命令
paste a.com b.com | awk '{print $3,$4,$5,$10,$11,$12}'
编辑:如果OP只需要特定的行(行),这可能不起作用