Відповіді:
awk
Програма представляє собою серію пар умова дії, умови , які є поза фігурних дужок і дій , будучи вкладеними в них. Умова вважається помилковою, якщо вона оцінює нуль або порожній рядок, все інше є істинним (неініціалізовані змінні - нуль або порожній рядок, залежно від контексту, тому вони є помилковими). Або умова, або дія можуть мати на увазі; дужки без умови (як починається ваша) вважаються справжніми умовами і завжди виконуються, якщо вони потрапляють, а будь-яка умова без дії надрукує рядок, якщо і лише у тому випадку, якщо умова виконана.
1
В кінці сценарію є умовою (завжди вірно) без дії, тому він виконує дію за замовчуванням для кожного рядка, друк лінії (які , можливо, були змінені з допомогою попереднього дії в фігурних дужках).
Мені справді не подобаються ці типи ярликів, тому що це обдумує і вводить в оману те, як його аналізують. Коли ви читаєте щось на кшталт awk -F"=" '{OFS="=";gsub(",",";",$2)}1'
, ви можете подумати, що 1
це зміна попереднього твердження. Або ви можете подумати 1
, це псевдонім для {print}
, який технічно не є правильним.
Насправді 1
це абсолютно окреме твердження. Ви можете відокремити такі твердження:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'
Кожен формат заяви awk є condition {action}
. Якщо не {action}
вказано, дія за замовчуванням - це{print}
. (Якщо не condition
вказано, умова за замовчуванням є true
.)
Отже, тут 1
є умова, яку завжди оцінюють, true
оскільки вона є ненульовою. Значення action
опущено, тому {print}
виконується за замовчуванням . Ви можете подумати про це так:
awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'