我知道如何使用awk从文件中读取第n行:
awk 'NR == 10' myfile.txt
它工作正常。现在我需要从这个文件中读取多行,行号在另一个文件myrows.txt
中给出:
10
15
25
100
是否可以做这样的事情:
cat myrows.txt | awk 'NR == ?how?' myfile.txt
还是我需要循环?
答案 0 :(得分:3)
你可以使用这个awk:
awk 'FNR==NR {a[$0]; next} FNR in a' myrows.txt myfile.txt
<强>解释强>
FNR==NR # for first file populate an array `a` with line numbers as key
next # keep reading 1st file till EOF is reached
FNR in a # print record from 2nd file if current line # in 2nd file is in array a
答案 1 :(得分:1)
您也可以使用sed
:
sed -n "$(sed 's/$/p;/' rows.txt)" myfile.txt
内部sed
命令创建以下脚本
10p;
15p;
25p;
100p;
...将由外部sed
命令执行。
顺便说一下,我更喜欢@anubhava的awk
解决方案。它看起来更清洁。但是,这两个命令都是一样的。
答案 2 :(得分:1)
你也可以使用while循环:
while read line
do
awk "NR == $line" myfile.txt
done < "myrows.txt"