Bash - Фильтрация строк с определенной долей занятых столбцов

Вы хотите использовать pingв Solaris, но в вашем пути нет соответствующего каталога (/usr/sbin).

Чтобы добавить /usr/sbinк вашему пути, добавьте

PATH="$PATH:/usr/sbin"

в файл ~/.profileи перезапустите сеанс оболочки.

1
24.01.2020, 23:10
3 ответа

Далеко ли

awk 'gsub(/-/, "&") < 2' file
ID       Ct       1          2          3          4           5             6
3        0        consensus  consensus  consensus  consensus   consensus     consensus
5        0        -          AT         AT         GC          GC            AT
8        0        consensus  consensus  consensus  -           consensus     consensus

понял? Имейте в виду, что ничего не было сказано rg. желаемый результат -вам нужен один выходной файл, имена файлов с префиксом к выходным строкам или новые файлы с именами, похожими на исходные, или что?

РЕДАКТИРОВАТЬ(после комментариев к новым именам файлов):

awk 'gsub(/-/, "&") < 2 {print > (FILENAME ".new")}' /path/to/file/*
1
28.04.2021, 23:25

Если все файлы находятся в одном каталоге, вы можете использовать цикл for/glob для циклического просмотра каждого файла и выполнения для них команды awk:

for file in /path/to/files/*; do
    awk '{
        count=0
        for (i=3;i<=8;i++) {
            if ($i == "-") {
                count++
            }
        }
        if ((count <= 1)) {
            print
        }
    }' "$file"
done

Для каждой строки он будет перебирать столбцы 3 -8, если значение столбца равно -, оно добавляется к count, если countбольше 1 для строки, оно будет не быть напечатанным.

0
28.04.2021, 23:25

Perl удобен для такого рода вещей -, в частности, он допускает полевые grepбез явного цикла, результат которого (при вычислении в скалярном контексте )дает количество совпадений. Так например

$ perl -lane 'print if 3 > grep { $_ eq "-" } splice @F, 2' file
ID       Ct       1          2          3          4           5             6
3        0        consensus  consensus  consensus  consensus   consensus     consensus
5        0        -          AT         AT         GC          GC            AT
8        0        consensus  consensus  consensus  -           consensus     consensus
0
28.04.2021, 23:25

Теги

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