![如何提取字符串](https://linux22.com/image/148376/%E5%A6%82%E4%BD%95%E6%8F%90%E5%8F%96%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我的数据如下
sp|Q9H9K5|MER34_HUMAN(9-21)
sp|Q9H9K5|MER34_HUMAN(493-507)
sp|Q9H9K5|MER34_HUMAN(524-539)
sp|P31689|DNJA1_HUMAN(22-33)
sp|P31689|DNJA1_HUMAN(66-82)
sp|P31689|DNJA1_HUMAN(93-104)
sp|P08246|ELNE_HUMAN(7-27)
sp|P08246|ELNE_HUMAN(72-83)
sp|P10144|GRAB_HUMAN(5-13)
我正在尝试提取之间的字符串||
sed -n " ||" file
grep "||" file
不工作 。
欲望输出是这样的
Q9H9K5
Q9H9K5
Q9H9K5
P31689
P31689
P31689
P08246
P08246
P10144
然后我想让它们变得独一无二
Q9H9K5
P31689
P08246
P10144
答案1
在这里使用可以cut
达到很好的效果。
cut -d\| -f2 myfile.txt
产生以下输出:
Q9H9K5
Q9H9K5
Q9H9K5
P31689
P31689
P31689
P08246
P08246
P10144
-d 告诉cut
我们要注意管道字符来分隔输出的列(在这种情况下我们必须转义它)。 -f 指定您想要返回的输入的哪一列(或多列)。列从 1 开始编号。
如果您只需要唯一值,可以将该输出通过管道传输到 sort 和 uniq,如下所示:
cut -d\| -f2 myfile.txt | sort | uniq
这会产生:
P08246
P10144
P31689
Q9H9K5
答案2
您可以尝试以下方法:
awk -F\| '{print $2}' input_file|sort -u