使用awk基于其他文件的值从一个文件打印多个NR

使用awk基于其他文件的值从一个文件打印多个NR,awk,Awk,我想根据另一个文件的输入值从一个文件打印出多行。 以下是文件1的表示形式: 2 4 1 以下是文件2的表示形式: MANCHKLGO kflgklfdg fhgjpiqog fkfjdkfdg fghjshdjs jgfkgjfdk ghftrysba gfkgfdkgj jfkjfdkgj 基于第一个文件的第一列,代码应首先打印第二个文件的第二行,然后打印第四行,然后打印第二个文件的第一行。因此,输出应如下所示: kflgklfdg fkfjdkfdg MANCHKLGO 以下是我尝试的

我想根据另一个文件的输入值从一个文件打印出多行。 以下是文件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?

尝试:

$ awk 'NR==FNR{a[NR]=$0;next} {print a[$1]}' file2 file1
kflgklfdg
fkfjdkfdg
MANCHKLGO
工作原理
  • NR==FNR{a[NR]=0;next}

    这将文件2的内容保存在数组
    a

  • 打印[$1]

    对于文件1中的每个数字,我们打印所需的文件2行

问题早期版本的解决方案 另一个例子:

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
awk'
NR==FNR{a[$1];顺序[n++]=$1;下一个}
a{lines[FNR]=$0}中的FNR

END{for(i=0;iSorry,我将用我尝试过的代码编辑问题。感谢您的快速回复,我修改了我的问题,因为我没有为我之前提出的问题尝试任何代码,所以我决定用我尝试过的代码修改问题(实际上我更改了第一个文件本身,以便一次打印一行)@MaulikUpadhyay OK。答案更新为一次打印一行。
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