1

我有 2 个单独的文本文件,每个文件的格式完全相同。我可以 grepFILE1.txt查找特定的搜索词并输出每个匹配项的行号。行号以数字顺序输出到文件或变量。

我想使用每个行号并将该行从FILE2.txt数字顺序打印到单个OUTPUT.txt. 有谁知道一种方法,使用awksed做到这一点?

我有一个值为 25 26 27 28 的字符串变量 $linenumbers。

我使用以下命令:

对于 $linenumbers 中的 i;做 sed -n "/$I/p" $i test_read2.fastq >> test.fastq; 完毕。

我得到错误

sed: 无法读取 25: 没有这样的文件或目录

sed: 无法读取 26: 没有这样的文件或目录

sed: 无法读取 27: 没有这样的文件或目录

sed: 无法读取 28: 没有这样的文件或目录

如果我一个一个地执行这个 sed 命令,我可以从文件中提取第 25、26、27 和 28 行,并使用以下命令将其打印到文件中;

sed -n "25p" test_read2.fastq >> test.fastq

我想用变量替换“25p”,这样它就可以从文件中提取多行(25、26、27、28),而无需一一进行...

4

3 回答 3

1

不确定你到底想做什么。如果你想打印file其中定义的行,lines你可以这样做awk 'NR==FNR{a[$0];next}FNR in a' lines file

测试:

$ cat lines
1
3
7
$ cat file
a
b
c
d
e
f
g

$ awk 'NR==FNR{a[$0];next}FNR in a' lines file
a
c
g
于 2014-03-12T12:08:45.060 回答
1
sed -n "` grep -n 'Yourpattern' File1.txt | sed 's/:.*/p/'`" File2.txt

小心替换和(双)引号YourPattern

于 2014-03-12T12:52:31.737 回答
1

尝试这个:

grep -n interesting FILE1.txt | cut -d: -f1 | while read l
do
   sed -n "$l p" FILE2.txt
done

例子:

$ cat FILE1.txt 
foo
bar
baz
$ cat FILE2.txt 
qux
quux
quuux
$ grep -n bar FILE1.txt | cut -d: -f1 | while read l; do sed -n "$l p" FILE2.txt; done
quux
于 2014-03-12T12:06:15.987 回答