Как отфильтровать столбец в TSV-файле с миллиардами строк

Спасибо Ульриху Шварцу и hargut за то, что указали мне правильное направление. На самом деле это было логическое значение. Я включил httpd _enable _cgi, как было предложено, и это все равно не сработало. Затем я просмотрел список логических значений, используя

sudo getsebool -a | grep httpd

Так я узнал, что существует логическое значение с именем

httpd_can_network_connect_db

и что он был выключен.

Я включил его с помощью

sudo setsebool httpd_can_network_connect_db=1

Если кто-то использует MySql и выполняет миграцию с Debian на систему с повышенной безопасностью, это обязательное условие. Так много нужно узнать о SELinux. Еще раз спасибо.

-1
10.03.2020, 20:01
5 ответов

Это похоже на задачу для awk. Вы можете попробовать:

awk '{if ($4); print $4 $7}' filename.tsv

После полезного предложения из комментариев:

awk 'BEGIN { FS = "\t" } ; $4 != "" { print $4 "\t" $7}'
0
28.04.2021, 23:20

Непонятно, какое у вас требование. Предполагая, что, исключая первую строку, это только значения четвертого столбца (, помеченного как «ген» ), значение которого в шестом столбце (, помеченного как «продукт» ), отличается от «гипотетического белка».

grep -v "hypothetical protein" < <(tail -n +2 file.tsv) | cut -f4 -d$'\t'

Пояснение

tail -n +2 file.tsv

исключает первую строку ("locus _tag", "type" и т. д.)

grep -v "hypothetical protein"

исключает все строки, содержащие строку «гипотетический белок»

cut -f4 -d$'\t'

печатает четвертый столбец.

0
28.04.2021, 23:20

Попробуйте вот этот -вкладыш:

cut -f4 in.tsv | tail -n +2 | grep -P '\S'

Детали:
cut -f4 in.tsv:вывести 4-й столбец с разделителями TAB -входного файла in.tsv.
tail -n +2:удалите первую строку (заголовка ).
grep -P '\S':сохранить только те строки, которые содержат не -пробельные символы, то есть удалить пустые строки. -Pговорит grepиспользовать регулярные выражения Perl.

Если вам нужны только уникальные имена генов, добавьте sort -uвот так:

cut -f4 in.tsv | tail -n +2 | grep -P '\S' | sort -u
1
28.04.2021, 23:20

Использованиеcsvcut:

csvcut -t -c gene -x file.tsv

-xудалит пустые строки.

0
28.04.2021, 23:20

Использование awk:

awk -F'\t' '$4 != "" {arr[$4] = 1} END {for (idx in arr) print idx}' file.tsv
  • -F'\t':Разделить на таб.
  • $4 != "":Если 4-е поле не пусто…
  • {arr[$4] = 1}:…используйте его как индекс в назначении массива -.
    • Последующие экземпляры того же индекса перезапишут элемент массива -, дубликаты не сохраняются.
    • Значение, назначенное (1), является произвольным, 0или "blergh"также подойдут.
  • END:Когда все строки прочитаны…
  • {for (idx in arr) print idx}:…распечатать все индексы.
0
28.04.2021, 23:20

Теги

Похожие вопросы