Вы можете сделать это несколькими способами, как показано:
$ grep -vP '^(?:(?!\t).)+\tNA\tNA(?=\t|$)' inp.tsv
$ sed -Ee 'h;s/\t/\n/;s/$/\t/;/\n(NA\t)\1/d;g' inp.tsv
$ perl -F'\t' -lane 'print if 2 != grep { /^NA$/ } @F[1,2]' inp.tsv
$ perl -MList::MoreUtils=any -F'\t' -lane 'print if any { ! /^NA$/ } @F[1,2]' inp.tsv
# fs => field separator set to a TAB
# nT => not TAB
# F => consecutive run of non TABs, a field
$ fs="`echo x | tr x '\011'`"; nT="[^${fs}]"; F="$nT$nT*"
$ sed -e "/^$F${fs}NA${fs}NA\$/d" -e "/^$F${fs}NA${fs}NA${fs}/d";exit
Результаты:
TRINITY_DN12995_c0_g1_i1.p1 PF06799 NA
TRINITY_DN6047_c0_g1_i1.p1 PF10585 GO:0008641
TRINITY_DN37780_c0_g1_i3.p2 PF00071 GO:0003924,GO:0005525
TRINITY_DN29879_c0_g1_i3.p1 PF01657 NA
TRINITY_DN72702_c0_g1_i1.p1 PF00498 GO:0005515
TRINITY_DN24890_c0_g1_i7.p1 PF00854 GO:0016020,GO:0022857,GO:0055085
TRINITY_DN46477_c0_g1_i1.p1 PF00069 GO:0004672,GO:0005524,GO:0006468
Предположения:
\012
grep
поддерживает опцию -P
sed
поддерживает не -конструкции POSIX, такие как \t
, \n
на RHS,(...)
bash|sh
командной строке Я полагаю, что вы неправильно интерпретируете «подоболочку» и «подпроцесс» (, также известный как дочерний процесс ), и справочная страница bash не очень помогает в прояснении путаницы.
Подоболочка — это примерно то, что вы получаете, когда текущая оболочка вызывает fork()
. Форк создает подпроцессы; поэтому подоболочка является подпроцессом.
На справочной странице bash сказано, что bash «выполняет команды в подоболочке», но из этого неясно, что для запуска внешних процессов (, таких как ps
), он затем вызывает exec()
в подоболочке, заменяя работающая подоболочка bash с исполняемым файлом новой команды. В некоторых случаях, например, когда ()
используется в bash, подоболочка запускается (
и завершается при )
, а промежуточные команды могут запускаться в своих собственных подоболочках/подпроцессах.
Единственная причина, по которой подоболочка и дочерний процесс не совпадают, заключается в том, что дочерний процесс может (или не может больше )быть другим экземпляром одного и того же исполняемого файла.