我有一个包含400,000行的文件A.我有另一个文件B有一堆行号。
File B:
-------
98
101
25012
10098
23489
我必须从文件A中提取文件B中指定的那些行号。我想从文件A中提取行98,101,25012,10098,23489。如果在以下情况下提取这些行。
我想使用see -n'x'p fileA。但是,我不知道如何从文件中提供'x'。另外,我不知道如何从命令中管道'x'的值。
答案 0 :(得分:1)
sed
可以打印您想要的行号:
$ printf $'foo\nbar\nbaz\n' | sed -ne '2p'
bar
如果你想要多行:
$ printf $'foo\nbar\nbaz\n' | sed -ne '2p;3p'
bar
baz
要将一组行转换为sed
这样的命令,请使用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。
答案 1 :(得分:1)
awk更适合这项任务:
fileA in file case:
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