awk将文件中的所有行与另一行合并

时间:2015-04-18 15:47:25

标签: bash awk

以下awk将target.txt与out_parse.txt组合在一起,输出为GJ-53.txt。如果out_parse中有多行,它们如何写入GJ-53.txt?截至目前,out_parse的第一行保存到文本文件GJ-53,但第二行没有。{比你:)。

awk '{close(fname)} (getline fname<f)>0 {print>fname}' f=target.txt out_parse.txt

out_parse.txt的内容

13  20763612    20763612    C   T
13  20763620    20763620    A   G

target.txt的内容

GJ-53.txt

 cat -v out_parse.txt
 13      20763612        20763612        C       T
 13      20763620        20763620        A       G

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望将out_parse.txt的内容复制到新文件,该文件的名称在文件target.txt中给出。要做到这一点,你根本不需要使用awk:

cp out_parse.txt "$(< target.txt)"

在bash中,$(< file)可用作file内容的替代。它实现了与$(cat file)相同的功能。

如果你想使用awk,你可以这样做:

awk 'NR==FNR{f=$0;next}{print>f}' target.txt out_parse.txt

第一个块适用于第一个文件,其中总记录号NR等于当前文件的记录号FNR。它将行的内容(即文件名)保存到f并跳过任何进一步的指令。第二个块仅适用于第二个文件,并将每一行打印到f中保存的文件名。