Sed在while-read循环中

Sed在while-read循环中,sed,while-loop,Sed,While Loop,在一段时间内,我已经阅读了很多关于使用sed的问题和答案。我想我已经正确地下了命令,但我似乎没有得到任何输出,一旦我把所有的部分放在一起。有人能告诉我我错过了什么吗 我有一个700个变量的输入文件,每行一个。我需要在sed命令中使用这700个变量中的每一个。我运行以下命令以验证变量是否正确输出: cat Input_File.txt |读取变量时;不要重复$var;完成 然后,我尝试添加sed命令,如下所示: $ Otu="S41_Folmer_Otu96;size=12;" $ grep $O

在一段时间内,我已经阅读了很多关于使用sed的问题和答案。我想我已经正确地下了命令,但我似乎没有得到任何输出,一旦我把所有的部分放在一起。有人能告诉我我错过了什么吗

我有一个700个变量的输入文件,每行一个。我需要在sed命令中使用这700个变量中的每一个。我运行以下命令以验证变量是否正确输出:

cat Input_File.txt |读取变量时;不要重复$var;完成

然后,我尝试添加sed命令,如下所示:

$ Otu="S41_Folmer_Otu96;size=12;"
$ grep $Otu -A 10 Multi_BLAST_5814.txt
            OR
    Query= S41_Folmer_Otu96;size=12;
    Length=101

    Sequences producing significant alignments:       Score(Bits)  E Value

    gi|58397553|gb|AY830431.1|  Scopelocheirus schellenbergi clone...   180    1E-41
    gi|306447543|gb|HQ018876.1|  Liposcelis paeta isolate CZ cytoc...   174    6E-40
    gi|306447533|gb|HQ018871.1|  Liposcelis decolor isolate CQ cyt...   104    9E-19
    gi|1043259532|gb|KX130860.1|  Batocera rufomaculata isolate Br...   99    4E-17
    gi|987210821|gb|KR141076.1|  Psocoptera sp. BOLD:ACO1391 vouch...   81    1E-11
cat Input_File.txt |读取变量时;do sed-n“/$var/,+10p”Multi-BLAST_5814.txt>>Multi-BLAST_子集;完成

这个命令让我没有错误,但是一个闪烁的光标好像这是一个无限循环。它应该使用700个变量中的每一个,在Multi_BLAST_5814.txt中找到相应的行,并将搜索变量行和搜索词后的10行输出到一个新文件中,并在执行时追加每一行。我可以使用手动设置的单值变量成功地单独执行sed命令,并且可以使用输入文件成功地执行while循环。有人想过为什么这不起作用吗

用户,这正是我到目前为止所做的

我有一个大的文本文件(128MB)和爆炸输出。我需要在此搜索769个样本的结果子集(在文件中的5814个样本中)

我已经用769个示例名称创建了一个.txt文件

为了测试grep和sed,我手动分配了一个变量,其中包含需要搜索的769个样本名称中的一个,并且可以获得如下所示的结果:

$ Otu="S41_Folmer_Otu96;size=12;"
$ grep $Otu -A 10 Multi_BLAST_5814.txt
            OR
    Query= S41_Folmer_Otu96;size=12;
    Length=101

    Sequences producing significant alignments:       Score(Bits)  E Value

    gi|58397553|gb|AY830431.1|  Scopelocheirus schellenbergi clone...   180    1E-41
    gi|306447543|gb|HQ018876.1|  Liposcelis paeta isolate CZ cytoc...   174    6E-40
    gi|306447533|gb|HQ018871.1|  Liposcelis decolor isolate CQ cyt...   104    9E-19
    gi|1043259532|gb|KX130860.1|  Batocera rufomaculata isolate Br...   99    4E-17
    gi|987210821|gb|KR141076.1|  Psocoptera sp. BOLD:ACO1391 vouch...   81    1E-11
$sed-n/$Otu/,+10p“多功能BLAST_5814.txt

输出正是我想要的,如下所示:

$ Otu="S41_Folmer_Otu96;size=12;"
$ grep $Otu -A 10 Multi_BLAST_5814.txt
            OR
    Query= S41_Folmer_Otu96;size=12;
    Length=101

    Sequences producing significant alignments:       Score(Bits)  E Value

    gi|58397553|gb|AY830431.1|  Scopelocheirus schellenbergi clone...   180    1E-41
    gi|306447543|gb|HQ018876.1|  Liposcelis paeta isolate CZ cytoc...   174    6E-40
    gi|306447533|gb|HQ018871.1|  Liposcelis decolor isolate CQ cyt...   104    9E-19
    gi|1043259532|gb|KX130860.1|  Batocera rufomaculata isolate Br...   99    4E-17
    gi|987210821|gb|KR141076.1|  Psocoptera sp. BOLD:ACO1391 vouch...   81    1E-11
要测试以确保输入文件包含正确的变量,我运行以下命令:

$ Cat Input_File.txt
$ while read Otu; do echo $Otu; done <Input_File.txt

    S41_Folmer_Otu96;size=12;
    S78_Folmer_Otu15;size=538;
    S73_Leray_Otu52;size=6;
    S66_Leray_Otu93;size=6;
    S10_Folmer_Otu10;size=1612;
    ... All 769 variables
$Cat Input\u File.txt
$whilereadotu;不要重复$Otu;done>Multi_BLAST_Subset.txt;完成
$cat Input_File.txt |读取Otu时;do sed-n“/$Otu/,+10p”Multi_BLAST_5814.txt>>Multi_BLAST_Subset.txt;完成

Sed挂起,从不关闭,只留下我一个闪烁的光标。Grep完成,但也没有输出。我不明白这为什么不起作用。每件事都是独立工作的,因此我可能需要手动搜索所有769个样本的副本/粘贴。

如果您可以访问GNU
grep
无需使用
sed
命令,
grep“$var”-10
将执行相同的操作,并且如果
$var
包含
sed
命令中使用的分隔符,则不会中断

man grep


如果您可以访问GNU
grep
而无需使用
sed
命令,
grep“$var”-如果
$var
包含
sed
命令中使用的分隔符,则10
将执行相同的操作,并且不会中断

man grep


不确定您是否已经尝试过,但请尝试将问题分成小块。下面是一个简单的例子:

$ cat Input_File.txt 
one
two
three
$

$ cat file.txt 
This is line one
This is line two
This is line three
This is another four
This is another five
This is another six
This is another seven
$

$ cat Input_File.txt | while read var ; do echo $var ; sed -n "/$var/,+1p" file.txt ; done
one
This is line one
This is line two
two
This is line two
This is line three
three
This is line three
This is another four
$

不确定您是否已经尝试过,但请尝试将问题分成小块。下面是一个简单的例子:

$ cat Input_File.txt 
one
two
three
$

$ cat file.txt 
This is line one
This is line two
This is line three
This is another four
This is another five
This is another six
This is another seven
$

$ cat Input_File.txt | while read var ; do echo $var ; sed -n "/$var/,+1p" file.txt ; done
one
This is line one
This is line two
two
This is line two
This is line three
three
This is line three
This is another four
$

关于
在while循环中使用sed的唯一重要问答是(Q)我应该在while循环中使用sed来处理文本吗?A) 不,看。[editt]您的问题包括简洁、可测试的样本输入和预期输出,我们可以帮助您以正确的方式完成任何您想做的事情。关于
在while循环中使用sed的唯一重要问题和答案是Q)我是否应该在while循环中使用sed来处理文本?A) 不,看。[editt]您的问题包括简明的、可测试的示例输入和预期的输出,我们可以帮助您以正确的方式执行任何操作。grep命令也不起作用。。。至少在grep中,命令完成,但输出中没有任何内容file@BrettOlds:尝试
grep-Ff your700VarList.txt-A 10bigfile>smallerFile
man grep
了解正在发生的事情,或在此处搜索类似的Qs。如果你的数据没有绊倒你,你可以打一个电话给grep。不是700。祝你好运。@Sheller:那就更接近了,我确实找到了最后一个搜索项目,但只找到了一个。我尝试使用以下命令将其更改为append:grep-Ff your700VarList.txt-A 10bigfile>>smallerFile。但这也只返回一个entry@BrettOlds检查输入文件的换行符。如果它们是Window的
\r\n
可以解释您的问题,因为
grep-Ff
read
都将
\r
视为标准字符,您将在更大的文件中搜索
yourVar\r
。有点胡乱猜测,但如果最后一个var后面没有linefeed@BrettOlds:是,同意
\r\n
行结尾。使用
cat-vet your700VarList.txt
查找它们。如果在行尾看到
^M$
,请使用
dos2unix your700*
。您可能还需要检查您的
bigFile
。祝你好运。grep命令也不起作用。。。至少在grep中,命令完成,但输出中没有任何内容file@BrettOlds:尝试
grep-Ff your700VarList.txt-A 10bigfile>smallerFile
man grep
了解正在发生的事情,或在此处搜索类似的Qs。如果你的数据没有绊倒你,你可以打一个电话给grep。不是700。祝你好运。@Sheller:那就更接近了,我确实找到了最后一个搜索项目,但只找到了一个。我尝试使用以下命令将其更改为append:grep-Ff your700VarList.txt-A 10bigfile>>smallerFile。但这也只返回一个entry@BrettOlds检查输入文件的换行符。如果它们是Window的
\r\n
,可能会解释您的问题,因为
grep-Ff
read
都会处理
\r