Відповіді:
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}'