如何在多行上grep不同的字符串,后跟一个制表符


抱歉,我找不到对我有用的答案。在使用Cygwin和/或Gitbash的Win10机器上工作时,我有一个序列读取名称("readsfile"(文件,后面是其他信息,所有信息都用制表符分隔。读取文件如下所示:
NB501827:133:HMV5HAFX2:1:11101:3747:1066    75  NODE_622711+_length_75_cov_990.55   100.000 43
NB501827:133:HMV5HAFX2:1:11101:8852:1068    74  NODE_622752+_length_4244_cov_356.337    100.000 74

我想简单地使用grep来解析读取的名称,直到每行的第一个选项卡,将结果输出到一个单独的文件";readnames.txt";。不包括";选项卡";角色会是一个加分项,但以后可以修复。输出文件";readnames.txt";应该是:

NB501827:133:HMV5HAFX2:1:11101:3747:1066
NB501827:133:HMV5HAFX2:1:11101:3747:1066
NB501827:133:HMV5HAFX2:1:11101:8852:1068

(目前,重复读取的名称是可以的(我已经尝试了在这个网站上找到的许多解决方案。考虑到grep与egrp与grep-E、与Perl-grep的一些例子包括:

grep -oE $'^*t' readsfile > readnames.txt
egrep '^NB*t' readsfile > readnames.txt
grep -oE '^NB'$'t' readsfile > readnames.txt
grep -oP 'NB*t' readsfile > readnames.txt
grep -o $'NB*t' readsfile > readnames.txt
grep -oE ^NB*$'t' readsfile > readnames.txt
grep -o '[NB*|[[:space:]]]' readsfile > readnames.txt
grep -o ^NB*[[:space:]] readsfile > readnames.txt
grep -o $"NB*$'t'" readsfile > readnames.txt
grep -o <NB*> readsfile > readnames.txt

注意,我还使用脚本来包括";实际的";使用<Cntrl-V><tab>的选项卡或在命令行使用的大多数组合中的CCD_ 3或CCD_。

还有一些其他不成功的解决方案:

sed -n 's/NB*t/&/p' readsfile > readnames.txt
sed -n 's/*t/&/p' readsfile > readnames.txt

我怀疑这已经完成了,但需要帮助。谢谢。

如果您希望删除第一个选项卡之后的所有内容,包括该选项卡,则此sed将执行sed 's/t.*//g'

或者,sed 's/([^t]*)t.*/1/g'找到重复任意次数的任何非制表符,然后是制表符和任意数量的字符,捕获直到第一个制表符的位,并将其吐出。

awk也能很好地处理制表符分隔的输入。awk -F't' '!a[$1]++ {print}'将为每一行打印出已消除重复数据的第一个字段(用制表符分隔(。这是通过插入和递增第一个字段中键控的数组的值来实现的,所以第一次遇到它时,它的计算结果为!0,所以打印被激发,并且以后每次看到值时都是!1.2等,评估为假而不打印。

根据zzevann的说法,只要您的列由可以用正则表达式描述的内容分隔,awk就是您的朋友。

在这种特殊情况下,

$ awk '{print $1}' filename > newfile

做你想做的事。默认情况下,awk在空白处分隔字段,并且您的第一个字段没有空白,所以您是金色的。如果是这样,您可以使用awk的-F选项来告诉它在选项卡上中断,或者其他什么。

对我来说,你遇到困难的线索是

我想简单地使用grep来解析读取的名称

grep(1(将查找内容,但它不会解析:它不会更改行或输出其中的一部分。

要只在第一次遇到第一个字段时打印它,我会使用

$ awk '!a[$1]++ {print $1}' filename > newfile

$ awk '{print $1}' filename | uniq > newfile

$ awk '{print $1}' filename | sort | uniq > newfile

$ awk '{print $1}' filename | sort -u > newfile

取决于月相。;-(

相关内容

最新更新