我有一个由一个标签分隔的2列的表,我想解析第二列。这是我表格的一行示例:
Solyc00g005080.1.1 query_length=98;subject_id=D3WD45;Name=D3WD45_XIMAM;Note=Putative RF2 protein OS-Ximenia americana GN-ycf2 PE-3 SV-1;subject_length=2285;subject_start=1509;subject_end=1588;e-value= 3e-38;identities=77/80 (96%25);gaps=0;positives=79/80 (98%25);length_coverage=80/98 (81.63%25)
我想要的输出:
Solyc00g005080.1.1 Putative RF2 protein OS-Ximenia americana GN-ycf2 PE-3 SV-1
我尝试了几种与grep和awk的组合,但我找不到正确的方法。我需要一个awk/sed/grep
命令来解析第二列中Note=
和;
之后的字符串。
答案 0 :(得分:3)
$ sed -r 's/(.*\t).*Note=([^;]+).*/\1\2/' file
olyc00g005080.1.1 Putative RF2 protein OS-Ximenia americana GN-ycf2 PE-3 SV-1
答案 1 :(得分:0)
试试这个GNU sed
命令,
sed -r 's/^(.*)( +).*Note=(.*);.*;.*;.*;.*;.*;.*;.*;.*/\1\2\3/g' file
示例:
$ echo 'Solyc00g005080.1.1 query_length=98;subject_id=D3WD45;Name=D3WD45_XIMAM;Note=Putative RF2 protein OS-Ximenia americana GN-ycf2 PE-3 SV-1;subject_length=2285;subject_start=1509;subject_end=1588;e-value= 3e-38;identities=77/80 (96%25);gaps=0;positives=79/80 (98%25);length_coverage=80/98 (81.63%25)' | sed -r 's/^(.*)( +).*Note=(.*);.*;.*;.*;.*;.*;.*;.*;.*/\1\2\3/g'
Solyc00g005080.1.1 Putative RF2 protein OS-Ximenia americana GN-ycf2 PE-3 SV-1