У меня есть файл psychrobacter_aquaticus.txt
, содержащий следующее содержимое:
WP_021815421.1 OG5_132922 deth|YP_182312 3 -07 42.35 81.7
WP_021815427.1 OG5_128110 rbal|NP_868155 1 -55 50.72 53.2
WP_012456834.1 NO_GROUP bsui|NP_700181 8 -53 48.18 62
WP_084606289.1 OG5_132922 aful|NP_069703 5 -28 57.00 92.6
WP_084606284.1 OG5_153487 bpse|YP_331974.1 6 -78 48.87 91.4
, а другой файл psychrobacter_arcticus.txt
содержит следующую информацию:
WP_007394757.1 OG5_129150 cbur|NP_820894 7 -12 84.09 100
WP_010195908.1 OG5_130915 yent|YP_001007837.1 6 -16 70.42 100
WP_011281115.1 OG5_128110 rbal|NP_868155 1 -56 51.67 52.3
WP_010196670.1 OG5_126760 yent|YP_001008069.1 7 -46 85.44 100
WP_010196689.1 OG5_128312 sent|NP_458465 8 -36 68.81 100
WP_010196702.1 OG5_126678 sfle|NP_709098 7 -52 81.30 100
WP_011281110.1 OG5_132922 deth|YP_182312 1 -07 38.82 81.7
WP_011281234.1 NO_GROUP bsui|NP_700181 8 -53 48.18 62
WP_011281111.1 OG5_132922 aful|NP_069703 5 -28 55.88 94.4
WP_010196711.1 OG5_126722 sent|NP_458477 2 -53 73.29 96.4
WP_010196728.1 OG5_126681 bpse|YP_335116.1 1 -42 80.36 86.8
Я хочу извлечь только соответствующие шаблон (на основе OG number
), поэтому я пишу следующий скрипт:
cut -d он дает мне следующий вывод:
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_aquaticus WP_084606289.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_132922 psychrobacter_arcticus WP_011281111.1
OG5_128110 psychrobacter_aquaticus WP_021815427.1
OG5_128110 psychrobacter_arcticus WP_011281115.1
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_aquaticus WP_084606289.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_132922 psychrobacter_arcticus WP_011281111.1
OG5_153487 psychrobacter_aquaticus WP_084606284.1
Но я хочу следующий вывод:
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_132922 psychrobacter_arcticus WP_011281111.1
OG5_128110 psychrobacter_aquaticus WP_021815427.1
OG5_128110 psychrobacter_arcticus WP_011281115.1
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_153487 psychrobacter_aquaticus WP_084606284.1
Я имею в виду, что если он обнаружил номер OG дважды или более раз, то должен быть напечатан только первый соответствующий. Кто-нибудь может направить меня?
\t' -f 2 psychrobacter_aquaticus > set1
cat set1 | while read line; do
grep $line *.txt >> set3
done
grep -v "NO_GROUP" set3 | tr ':' '\t' | cut -d он дает мне следующий вывод:
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_aquaticus WP_084606289.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_132922 psychrobacter_arcticus WP_011281111.1
OG5_128110 psychrobacter_aquaticus WP_021815427.1
OG5_128110 psychrobacter_arcticus WP_011281115.1
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_aquaticus WP_084606289.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_132922 psychrobacter_arcticus WP_011281111.1
OG5_153487 psychrobacter_aquaticus WP_084606284.1
Но я хочу следующий вывод:
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_132922 psychrobacter_arcticus WP_011281111.1
OG5_128110 psychrobacter_aquaticus WP_021815427.1
OG5_128110 psychrobacter_arcticus WP_011281115.1
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_153487 psychrobacter_aquaticus WP_084606284.1
Я имею в виду, что если он обнаружил номер OG дважды или более раз, то должен быть напечатан только первый соответствующий. Кто-нибудь может направить меня?
\t' -f 1,2,3 | awk '{print $3 "\t" $1 "\t" $2}' | sed 's/.txt//' > MCL_result
rm set1 set3
он дает мне следующий вывод:
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_aquaticus WP_084606289.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_132922 psychrobacter_arcticus WP_011281111.1
OG5_128110 psychrobacter_aquaticus WP_021815427.1
OG5_128110 psychrobacter_arcticus WP_011281115.1
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_aquaticus WP_084606289.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_132922 psychrobacter_arcticus WP_011281111.1
OG5_153487 psychrobacter_aquaticus WP_084606284.1
Но я хочу следующий вывод:
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_132922 psychrobacter_arcticus WP_011281111.1
OG5_128110 psychrobacter_aquaticus WP_021815427.1
OG5_128110 psychrobacter_arcticus WP_011281115.1
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_153487 psychrobacter_aquaticus WP_084606284.1
Я имею в виду, что если он обнаружил номер OG дважды или более раз, то должен быть напечатан только первый соответствующий. Кто-нибудь может направить меня?
Проблема:
NO_GROUP
. Решение:
awk 'FNR == 1 {delete a} !/NO_GROUP/ && !($2 in a) {print $2"\t"gensub(/\..*$/, "", 1, FILENAME)"\t"$1; a[$2]++;}' *.txt
Результаты тестового прогона:
OG5_132922 psychrobacter_aquaticus WP_021815421.1
OG5_128110 psychrobacter_aquaticus WP_021815427.1
OG5_153487 psychrobacter_aquaticus WP_084606284.1
OG5_129150 psychrobacter_arcticus WP_007394757.1
OG5_130915 psychrobacter_arcticus WP_010195908.1
OG5_128110 psychrobacter_arcticus WP_011281115.1
OG5_126760 psychrobacter_arcticus WP_010196670.1
OG5_128312 psychrobacter_arcticus WP_010196689.1
OG5_126678 psychrobacter_arcticus WP_010196702.1
OG5_132922 psychrobacter_arcticus WP_011281110.1
OG5_126722 psychrobacter_arcticus WP_010196711.1
OG5_126681 psychrobacter_arcticus WP_010196728.1
Сортировка:
Если вы хотите отсортировать результаты, просто перенаправьте их на sort
или sort -k2,2
в зависимости от желаемого результата.