Пара избранных, по сути не связанных друг с другом. Прочитайте как 2 разных, не связанных между собой предложения.
Простое определение номеров столбцов
Для тех, кто часто использует awk, как и для анализа журналов на работе, мне часто приходится выяснять, какие номера столбцов для файла. Итак, если я анализирую, скажем, файлы доступа Apache (некоторые примеры можно найти здесь ), я запускаю приведенный ниже скрипт для файла:
NR == 1 {
for (i = 1 ; i <= NF ; i++)
{
print i "\t" $i
}
}
NR > 1 {
exit
}
Я обычно называю это "cn.awk", для чисел c'olumn. Креатив, а? В любом случае, вывод выглядит так:
1 64.242.88.10
2 -
3 -
4 [07/Mar/2004:16:05:49
5 -0800]
6 "GET
7 /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables
8 HTTP/1.1"
9 401
10 12846
Очень легко сказать, что к чему. Я обычно называю это псевдонимами на своих серверах, и они везде.
Ссылка на поля по имени
Теперь предположим, что в вашем файле есть строка заголовка и вы предпочитаете использовать эти имена вместо номеров полей. Это позволяет вам сделать это:
NR == 1 {
for (i = 1 ; i <= NF ; i++)
{
field[$i] = i
}
}
Теперь предположим, что у меня есть эта строка заголовка ...
metric,time,val,location,http_status,http_request
... и я бы хотел сложить столбец val
. Вместо ссылки на 3 доллара, я могу назвать ее по имени:
NR > 1 {
SUM += $field["val"]
}
Главное преимущество - сделать скрипт более читабельным.