Как удалить текст из шаблона в определенном столбце - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть файл таблицы, такой как:

qseqid  sseqid  pident  length  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore    strand

scaffold    EOG091B09QV:/path/path/Z    xx  a   1:8830-20153    74.3    144 0   1
scaffold    EOG091B09QV:/path/path/A    x   a   1:8830-20153    100.0   93  0   0
scaffold    EOG091B09QV:/path/path/Q    x   a   1:8830-20153    41.3    189 49  3
scaffold    EOG091B09QV:/path/path/U    x   a   1:8830-20153    87.5    48  6   0
scaffold    EOG091B09QV:/path/path/K    x   a   1:8830-20153    100.0   60  0   0

И идея состоит в том, чтобы просто удалить в столбце sseqid текст после : и получить:

qseqid  sseqid  pident  length  mismatch    gapopen qstart  qend    sstart  send    evalue  bitscore    strand

scaffold    EOG091B09QV xx  a   1:8830-20153    74.3    144 0   1
scaffold    EOG091B09QV x   a   1:8830-20153    100.0   93  0   0
scaffold    EOG091B09QV x   a   1:8830-20153    41.3    189 49  3
scaffold    EOG091B09QV x   a   1:8830-20153    87.5    48  6   0
scaffold    EOG091B09QV x   a   1:8830-20153    100.0   60  0   0

Iзнать, что cut -f 1 -d ":" соответствует _species_strand_H.m8 может работать, но не в столбце.

Ответы [ 3 ]

0 голосов
/ 01 февраля 2019

Вы можете сделать это с помощью sed довольно легко:

sed -r 's/^(\S+\s+[^:[:space:]]+):\S+/\1/g' filename

Часть в скобках соответствует первому столбцу, пробелу между первым и вторым столбцами и части второго столбца вверхдо (но не включая) символа :.:\S+ соответствует оставшейся части второго столбца.Вся совпадающая часть строки затем заменяется только частью внутри скобок, которая представлена ​​как \1.

0 голосов
/ 01 февраля 2019

awk - хороший выбор для обработки текста на основе столбцов:

awk 'sub(/:.*/,"",$2)+7' file

выполнит работу: «удалите :.* из 2-го столбца.

0 голосов
/ 01 февраля 2019

Я предпочитаю Perl для таких вещей:

cat inputfile | perl -ne '@in=split(/\s/);$in[1]=~s/:(.*)$//;print(join(" ",@in));print "\n"'

perl -ne зацикливает каждую строку ввода, разбивает строку на массив, заменяет материал во втором элементе и соединяет массив вместе.

...