我有一个文件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
答案 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