从控制文件中读取数字并从数据文件中提取匹配的行号

Par*_*thi 6 sed awk text-processing

我有一个控制文件 - cntl.txt

2
3
5
Run Code Online (Sandbox Code Playgroud)

数据文件 - data.txt

red
blue
yellow
green
violet
orange
Run Code Online (Sandbox Code Playgroud)

我需要从控制文件中读取匹配的行,这里的预期输出是:

blue
yellow 
violet
Run Code Online (Sandbox Code Playgroud)

and*_*tsh 5

一个非常低效的解决方案示例:

for i in $(<control.txt); do awk -v c=$i 'NR~c{ print $0 }' data.txt; done;
Run Code Online (Sandbox Code Playgroud)

我也报告了我今晚学到的一个很好的解决方案:

awk 'FNR==NR{ z[$0]++;next }; FNR in z' control.txt data.txt
Run Code Online (Sandbox Code Playgroud)