从文件读取多行,在另一个文件中给出行号

时间:2015-02-25 11:10:51

标签: shell awk

我知道如何使用awk从文件中读取第n行:

awk 'NR == 10' myfile.txt

它工作正常。现在我需要从这个文件中读取多行,行号在另一个文件myrows.txt中给出:

10
15
25
100

是否可以做这样的事情:

cat myrows.txt | awk 'NR == ?how?' myfile.txt

还是我需要循环?

3 个答案:

答案 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"