Sed在while-read循环中
在一段时间内,我已经阅读了很多关于使用sed的问题和答案。我想我已经正确地下了命令,但我似乎没有得到任何输出,一旦我把所有的部分放在一起。有人能告诉我我错过了什么吗 我有一个700个变量的输入文件,每行一个。我需要在sed命令中使用这700个变量中的每一个。我运行以下命令以验证变量是否正确输出: cat Input_File.txt |读取变量时;不要重复$var;完成 然后,我尝试添加sed命令,如下所示: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
$ 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个样本的副本/粘贴。如果您可以访问GNUgrep
无需使用sed
命令,grep“$var”-10
将执行相同的操作,并且如果$var
包含sed
命令中使用的分隔符,则不会中断
从man grep
:
如果您可以访问GNUgrep
而无需使用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