Удалить всю строку, только если каждый столбец в ней равен $VAR1 или $VAR2

Вот чистое решение, которое сработало для меня. Войдите в любой сеанс tmux и-

$ kinit
$ aklog
0
05.06.2019, 12:02
2 ответа
$ VAR1=N
$ VAR2=X
$ awk -v a="$VAR1" -v b="$VAR2" '{ for (i=1; i<=NF; ++i) if ($i != a && $i != b) { print; next } }' file
hajn 32 ahnnd namm 5 543 asfn F
5739 dw 32eff Sfff 3 asd 3123 1

Здесь мы передаем значения $VAR1и $VAR2в наш короткий скрипт awkи его переменные aи b, используя -vв командной строке.

Внутри сценария awkмы перебираем поля каждой строки, и если какое-либо поле отличается как от значения a, так и от значения b, мы печатаем всю строку и сразу же переходим к следующей строке..

Если ни одно поле не отличается от aи b, ничего не происходит (строка не печатается ).

1
28.01.2020, 02:40

Вы можете получить желаемые результаты, правильно выбрав регулярное выражение. Обратите внимание :, предполагая, что переменные оболочки имеют мягкие символы, то есть те, которые не интерпретируются как специальные регулярные выражения. В случае, если это не так, вы можете указать переменные в контексте \Q...\E.

$ grep -P "(^|\s)(?!$VAR1(\s|\$))(?!$VAR2(\s|\$))" inp
0
28.01.2020, 02:40

Теги

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