Sed grep-f forEXACT模式

Sed grep-f forEXACT模式,sed,awk,grep,Sed,Awk,Grep,我想从其他较大的文件输入中提取名称列表,其中包含该名称以及与该名称相关的一些附加信息。我的问题是grep-f选项,因为它不匹配输入文件中的确切条目,而是匹配一些包含类似名称的其他条目 我试过: $ grep -f list.txt -A 1 input >output 以下是文件的格式 list.txt TE_final_35005 TE_final_1040 输入文件 >TE_final_10401 ACGTACGTACGTACGT >TE_final_35005 AC

我想从其他较大的文件输入中提取名称列表,其中包含该名称以及与该名称相关的一些附加信息。我的问题是grep-f选项,因为它不匹配输入文件中的确切条目,而是匹配一些包含类似名称的其他条目

我试过:

$ grep -f list.txt -A 1 input >output
以下是文件的格式

list.txt

TE_final_35005
TE_final_1040
输入文件

>TE_final_10401
ACGTACGTACGTACGT
>TE_final_35005 
ACGTACGATCAGT
>TE_final_1040
ACGTACGTACGT
所需输出:

>TE_final_35005 
ACGTACGATCAGT
>TE_final_1040
ACGTACGTACGT
我得到的输出:

>TE_final_10401
ACGTACGTACGTACGT
>TE_final_35005 
ACGTACGATCAGT
>TE_final_1040
ACGTACGTACGT
虽然TE_final_10401不在list.txt中

如何在列表中使用^

请帮助匹配精确值或建议其他方法。

添加整个单词switch-w:

输出:

>TE_final_35005 
ACGTACGATCAGT
>TE_final_1040
ACGTACGTACGT
添加整个单词开关-w:

输出:

>TE_final_35005 
ACGTACGATCAGT
>TE_final_1040
ACGTACGTACGT

有几件事,首先从文件中删除空白行:

sed  -i '/^\s*$/d' file list
然后,-w仅用于匹配整个单词,-A1将在匹配后打印下一行:

$ grep -w -A1 -f list file > new_file

$ cat new_file
>TE_final_35005
ACGTACGATCAGT
>TE_final_1040
ACGTACGTACGT

有几件事,首先从文件中删除空白行:

sed  -i '/^\s*$/d' file list
然后,-w仅用于匹配整个单词,-A1将在匹配后打印下一行:

$ grep -w -A1 -f list file > new_file

$ cat new_file
>TE_final_35005
ACGTACGATCAGT
>TE_final_1040
ACGTACGTACGT

正如其他人提到的,根据示例数据添加-w标志是最干净、最简单的方法。但是,由于您明确询问如何在list.txt中使用^

要向list.txt中的每一行添加^and/或$anchors,请执行以下操作:

这将在行首搜索模式,前面有一个>字符,并忽略任何尾随空格。然后,假设删除这些空行或将参数更改为-a2,则上一个命令将起作用

如果要自动将这些定位点添加到列表文件,同时删除任何空行,请使用此awk构造:

awk '{if($0 != ""){print "^>"$0"[ ]*$"}}' list.txt >newlist.txt
或者,如果您更喜欢sed就地编辑:

sed -i '/^[ ]*$/d;s/\(.*\)/^>\1[ ]*$/g' list.txt

正如其他人提到的,根据示例数据添加-w标志是最干净、最简单的方法。但是,由于您明确询问如何在list.txt中使用^

要向list.txt中的每一行添加^and/或$anchors,请执行以下操作:

这将在行首搜索模式,前面有一个>字符,并忽略任何尾随空格。然后,假设删除这些空行或将参数更改为-a2,则上一个命令将起作用

如果要自动将这些定位点添加到列表文件,同时删除任何空行,请使用此awk构造:

awk '{if($0 != ""){print "^>"$0"[ ]*$"}}' list.txt >newlist.txt
或者,如果您更喜欢sed就地编辑:

sed -i '/^[ ]*$/d;s/\(.*\)/^>\1[ ]*$/g' list.txt

@Thor我不确定行与行之间的空格是有意还是无意?@sudo_O:格式看起来非常类似,通常不是双倍行距。@Thor我不确定行与行之间的空格是有意还是无意?@sudo_O:格式看起来非常类似,通常不是双倍行距。