如何使用 awk 使用另一个文件中的数字正确地从文件中提取行?

Dav*_*ave 3 awk shell-script text-processing

我正在使用 bash shell。如果我有一个行号文件

1
4
7
9
Run Code Online (Sandbox Code Playgroud)

和另一个行文件,其中第一个元素是数字,后跟文本字符串

1,Michael Jordan
2,Karl Malone,
3,Charles Barkley
4,Greg Anthony
5,Chris Mullen
6,Reggie Miller
7,Billy Owens
8,David Robinson
9,Shaquille O'Neal
10,John Stockton
Run Code Online (Sandbox Code Playgroud)

awk仅当第一个数字属于第一个文件时,如何编写命令以从第二个文件中提取行?在上面的例子中,我期望这个结果

1,Michael Jordan
4,Greg Anthony
7,Billy Owens
9,Shaquille O'Neal
Run Code Online (Sandbox Code Playgroud)

我试过这个

awk 'FNR==NR{a[$1];next} $1 in a' /tmp/first_file /tmp/second_file > /tmp/third_file
Run Code Online (Sandbox Code Playgroud)

但它在第三个文件中什么也没产生。

ste*_*ver 5

由于您的第二个文件是逗号分隔的,因此您需要使用命令行选项将 awk 字段分隔符设置为,- :-F

awk -F, 'FNR==NR{a[$1];next} $1 in a' /tmp/first_file /tmp/second_file > /tmp/third_file
Run Code Online (Sandbox Code Playgroud)

或通过FS内置变量:

awk 'FNR==NR{a[$1];next} $1 in a' /tmp/first_file FS=, /tmp/second_file > /tmp/third_file
Run Code Online (Sandbox Code Playgroud)

后一种方法将允许您处理第一个文件不是逗号分隔(并且有多个字段)的情况。