Используя переменную с awk-v в сценарии оболочки

[113922] Работа в фоновом режиме по-прежнему означает, что по умолчанию вывод поступает на терминал. Разница заключается в том, что во время работы программы вы вводите другие команды. Очевидно, что это будет сложно с такими программами, как [114385]ls[114386], которые производят много вывода. Попробуйте следующее:

Вы сможете делать и другие вещи во время выполнения [114387]ls[114388]. При первом нажатии клавиши enter после завершения работы [114389]ls[114390] Вы получите сообщение типа:

Все выходные данные теперь будут в файле [114391]ls_files[114392].[113927].

1
10.12.2014, 12:03
2 ответа

Если вы сделаете:

awk -v benchmark=30 '...'

Это то же самое, что:

awk 'BEGIN{ benchmark = 30 } ... '

Это используется для установки начального значения для этой переменной.

Хотя я не понимаю, почему автор делает:

benchmark=30; ... | awk -v benchmark=$benchmark ..

Они также могут делать:

... | awk -v benchmark=30 ..
3
27.01.2020, 23:17

Путаница может быть вызвана тем фактом, что исходный автор использовал то же имя переменной для оболочки:

benchmark=30;gr...

как он / она сделал внутри awk :

awk -vbenchmark=$benchmark

который может или не может присвоить значение переменной оболочки эталонного теста для awk переменная эталонный тест .

Как только awk имеет это значение (в данном случае 30 ), awk проверяет, что шестой столбец вашего входного файла wk.txt больше, чем это значение:

$6 > benchmark

Тест, используя ваш пример, представляет собой сравнение строк:

for > 30

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

Это оценивается как истина, поэтому awk выводит всю строку в wc -l , который считает количество строк. Поскольку у вас есть только одна строка во входном файле, количество строк, в которых шестой столбец больше 30, составляет 1 .

Это значение присваивается переменной оболочки b .

2
27.01.2020, 23:17

Теги

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