我想根据另一个文件的输入值从一个文件中打印出多行。 以下是文件1的表示:
2
4
1
以下是文件2的表示:
MANCHKLGO
kflgklfdg
fhgjpiqog
fkfjdkfdg
fghjshdjs
jgfkgjfdk
ghftrysba
gfkgfdkgj
jfkjfdkgj
基于第一个文件的第一列,代码应首先打印第二个文件的第二行,然后是第四行,然后是第二个文件的第一行。因此,输出应该如下:
kflgklfdg
fkfjdkfdg
MANCHKLGO
以下是我尝试过的代码:
awk 'NR==FNR{a[$1];next}FNR in a{print $0}' file1.txt file2.txt
但是,正如预期的那样,输出不是第一行打印的顺序,而第二行和第四行是最后一行。如何从第二个文件中按照第一个文件中给出的顺序打印NR?
答案 0 :(得分:2)
尝试:
$ awk 'NR==FNR{a[NR]=$0;next} {print a[$1]}' file2 file1
kflgklfdg
fkfjdkfdg
MANCHKLGO
NR==FNR{a[NR]=$0;next}
这会将file2的内容保存在数组a
中。
print a[$1]
对于file1中的每个数字,我们打印所需的file2行。
$ awk 'NR==FNR{a[NR]=$0;next} {print a[2*$1];print a[2*$1+1]}' file2 file1
fkfjdkfdg
fghjshdjs
gfkgfdkgj
jfkjfdkgj
kflgklfdg
fhgjpiqog
答案 1 :(得分:1)
另一种观点:
awk '
NR==FNR {a[$1]; order[n++] = $1; next}
FNR in a {lines[FNR] = $0}
END {for (i=0; i<n; i++) print lines[order[i]]}
' file1.txt file2.txt
如果文件太大,此版本在内存中存储的行数较少。