Как с помощью awk удалить строки, содержащие строку в столбце n?

Команда

chown -R [ имя-пользователя]: www-data / media / hdd / owncloud / data Где [имя-пользователя] заменено именем пользователя maximilian

chmod -R 755 / media / hdd / owncloud / data

Поможет

3
22.05.2019, 13:28
3 ответа

Вам нужен оператор сопоставления с образцом~(или !~для отрицания ), обрабатывающий правый операнд как (расширенное )регулярное выражение в левом как строку, поэтому

awk -F'\t' '$4 !~ "^(NC|NZ)"' infile

Или короче:

awk -F'\t' '$4 !~ "^N[CZ]"' infile

и даже короче, если у вас нет места в столбце (, так как по умолчанию awkFS — это табуляция/пробел):

awk '$4 !~ "^N[CZ]"' infile
2
27.01.2020, 21:15

Попытка с помощью описанного ниже метода

команда

awk '$4 !~ /^NC|^NZ/{print $0}' filename

выход

awk '$4 !~ /^NC|^NZ/{print $0}' o.txt
NC_013132.1     7260299 7261429 WP_012793281.1
NC_013132.1     7573559 7574311 WP_012793549.1
NZ_CP022095.2   2884046 2885668 WP_003877393.1
0
27.01.2020, 21:15

Вы можете просто сделать это, как показано ниже. Когда вы используете awkс ==, вы выполняете буквальное сопоставление строки для равенства, в котором вы не можете выполнять сопоставление регулярных выражений, таких как ^или $. Вы можете просто выполнить сопоставление с образцом с помощью ~и включить совпадение с отрицанием с помощью !. Для нескольких шаблонов используйте стиль чередования (pat1|pat2), поддерживаемый в ERE

.
awk 'BEGIN { OFS=FS="\t" } $4 !~ /^(NZ|NC)/' file

Добавьте направление re -в конце команды для записи вывода в новый файл > newfile. Чтобы изменить файл в месте -, выполните действия, описанные в этом ответе . Как навсегда изменить файл с помощью awk? («в -месте» правки, как с «sed -i»)

4
27.01.2020, 21:15

Теги

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