使用包含行号的输入文件从文件打印行

时间:2013-05-22 10:06:53

标签: unix awk grep

我有一个文件numbers.txt,每行都包含一个数字。

我想使用该文件打印文件lines.txt中的行,即与numbers.txt中的数字对应的行。

可以用awk或其他方式直接在Unix命令行中完成吗?

示例:

numbers.txt

1
2
4
6

lines.txt

1: line one
2: line two
3: line three
...
6: line six

输出:

1: line one
2: line two
4: line four
6: line six

4 个答案:

答案 0 :(得分:3)

尝试这个awk one-liner:

awk 'NR==FNR{n[$0];next}FNR in n' numbers.txt lines.txt

答案 1 :(得分:1)

您可以使用此命令在文件n中输出行lines.txt

 cat lines.txt | head -<n> | tail -1

然后将numbers.txt中的所有行作为n执行:

 for n in `cat numbers.txt`; do cat lines.txt | head -$n | tail -1; done;

注意:如果lines.txt中没有与数字对应的行,则会输出文件中的最后一行;你需要一个额外的测试来检查并避免这种情况。

答案 2 :(得分:1)

 parallel -ka numbers.txt 'sed -n {}p lines.txt'

Here是关于 parallel

的更多信息

答案 3 :(得分:0)

awk -F":" 'FNR=NR{a[$0];next}($1 in a){print}' numbers.txt lines.txt