яке значення 1 в кінці сценарію awk


19

Я читав цей сценарій awk

awk -F"=" '{OFS="=";gsub(",",";",$2)}1'

Я хочу знати, яка функція 1в кінці


Ви також можете зробитиawk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
GypsyCosmonaut

Відповіді:


24

awkПрограма представляє собою серію пар умова дії, умови , які є поза фігурних дужок і дій , будучи вкладеними в них. Умова вважається помилковою, якщо вона оцінює нуль або порожній рядок, все інше є істинним (неініціалізовані змінні - нуль або порожній рядок, залежно від контексту, тому вони є помилковими). Або умова, або дія можуть мати на увазі; дужки без умови (як починається ваша) вважаються справжніми умовами і завжди виконуються, якщо вони потрапляють, а будь-яка умова без дії надрукує рядок, якщо і лише у тому випадку, якщо умова виконана.

1В кінці сценарію є умовою (завжди вірно) без дії, тому він виконує дію за замовчуванням для кожного рядка, друк лінії (які , можливо, були змінені з допомогою попереднього дії в фігурних дужках).


7

Мені справді не подобаються ці типи ярликів, тому що це обдумує і вводить в оману те, як його аналізують. Коли ви читаєте щось на кшталт 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}
'

5

1 означає надрукувати кожен рядок.

Заява awk те саме, що писати:

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.