将一个文件中的第n个和第(n + 1)个值替换为另一个文件

时间:2017-06-05 15:13:49

标签: awk

我有两个文件:

f1.txt:

header 1
header 2
100
100
100
100
100
100
100
100
100
100
100
100
100

f2.txt:

header 1
header 2
10
1234
5678
10
10
2345
6789
10
10
3456
7890
10
10

期望的输出

f3.txt:

header 1
header 2
100
1234
5678
100
100
2345
6789
100
100
3456
7890
100
100

第4行和第4行中出现的f2.txt中的值5,然后8& 9,然后12& 13(即,它们每隔6行间隔一次),我想将它们放在f1.txt中以替换f1.txt中的相应行。我怎么能这样做?

到目前为止,我只能从f2.txt中打印出这些值:

exec<f2.txt
var=$(awk 'NR % 6 == 4')
echo "$var"

这会产生

1234
2345
3456

然后当我改变4到5时,它给了我第二组值。所以我试图学习如何提取2组值,然后将它们放在f1.txt中?任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

尝试:

paste f1.txt f2.txt | awk -F'\t' '
    NR < 3 || (NR-2)%4 == 1 || (NR-2)%4 == 0 {print $1; next}
    {print $2}
'

您想要的输出不表示6行的组,而是4行的组。也许2个标题行会让你失望。

我假设您的输入文件不包含标签。

来自Ed Morton的更简洁的awk:

awk -F'\t' '{print (NR-2)%4 < 2 ? $1 : $2}'