提取文件unix的多行

我有一个40,000行的文件A. 我有另一个文件B有一堆行号。

File B: ------- 98 101 25012 10098 23489 

我必须从文件A中提取文件B中指定的行号。那是我想从文件A中提取98,101,250,12,10098,23489行。如何在下列情况下提取这些行。

  1. 文件B是一个明确的文件。
  2. 文件B到达一个pipe道。 例如,grep -n模式somefile.txt给我的文件B.

我想用看-n'x'p fileA。 但是,我不知道如何从文件中提供'x'。 另外,我不知道如何从命令中input'x'的值。

sed可以打印你想要的行号:

 $ printf $'foo\nbar\nbaz\n' | sed -ne '2p' bar 

如果你想要多行:

 $ printf $'foo\nbar\nbaz\n' | sed -ne '2p;3p' bar baz 

要将一组行转换为像这样的sed命令,请使用sed来实现美观:

 $ printf $'98\n101' | sed -e 's/$/;/' 98; 101; 

把它放在一起:

 sed -ne "$(sed -e 's/$/p;/' B)" A 

测试:

 $ cat A 1 22 333 4444 $ cat B 1 3 $ sed -ne "$(sed -e 's/$/p;/' B)" A 1 333 

QED。

awk更适合这个任务:

fileA在文件大小写中:

 awk 'NR==FNR{a[$0]=1;next}a[FNR]' fileB fileA 

从管道fileA内容:

 cat fileA|awk 'NR==FNR{a[$0]=1;next}a[FNR]' fileB - 

哦,你想FileB中的文件或从管道,然后相同的awk cmd:

 awk '...' fileB fileA 

 cat fileB|awk '...' - fileA