Я читал этот сценарий awk
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
Я хочу знать, какова функция 1
в конце этого
linux
shell-script
awk
Мираж
источник
источник
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
Ответы:
awk
Программа представляет собой серию пар условие действия, условия , являющиеся вне фигурных скобок и действий , будучи вложенными в них. Условие считается ложным, если оно оценивается как ноль или пустая строка, а все остальное - истина (неинициализированные переменные - это ноль или пустая строка, в зависимости от контекста, поэтому они являются ложными). Может подразумеваться условие или действие; Скобки без условия (как начинается твое) считаются имеющими истинное условие и всегда выполняются при попадании в них, и любое условие без действия будет печатать строку тогда и только тогда, когда условие выполнено.В
1
конце вашего скрипта есть условие (всегда истинное) без действия, поэтому он выполняет действие по умолчанию для каждой строки, печатая строку (которая могла быть изменена предыдущим действием в фигурных скобках).источник
Мне действительно не нравятся эти типы ярлыков, потому что они запутывают и вводят в заблуждение, как они анализируются. Когда вы читаете что-то вроде этого
awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
, вы можете подумать, что1
это модифицирует предыдущий оператор. Или вы можете подумать, что1
это псевдоним для{print}
, что не является технически правильным.Вообще-то,
1
это совершенно отдельное утверждение. Вы можете отделить утверждения следующим образом:Каждый формат оператора AWK является
condition {action}
. Если ничего не{action}
дано, то действием по умолчанию является{print}
. (Если нетcondition
данных, то по умолчанию используется условиеtrue
.)Итак, вот
1
условие, которое всегда оценивается,true
поскольку оно ненулевое. Параметрaction
опущен, поэтому выполняется по умолчанию{print}
. Вы можете думать об этом так:источник
1
означает печатать каждую строку.Утверждение awk аналогично написанию:
источник