我有一个40,000行的文件A. 我有另一个文件B有一堆行号。
File B: ------- 98 101 25012 10098 23489
我必须从文件A中提取文件B中指定的行号。那是我想从文件A中提取98,101,250,12,10098,23489行。如何在下列情况下提取这些行。
我想用看-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