Pipes создает вложенные оболочки. Встроенная функция оболочки exit
завершает оболочку. Это привело к неожиданному поведению в вашем случае:
> exit | exit | echo wow
wow
Советую посмотреть раздел Pipelines в man bash
. Также посмотрите help exit
.
Входные данные, указанные в виде URL-адреса в комментарии, разделены табуляцией. Это означает, что мы можем проанализировать его первое поле с разделителями табуляции -как своего рода «ключ» для сравнения с другими строками. Мы не должны заботиться о разделенных пробелами словах в первом поле, но можем рассматривать все первое поле как единое целое.
BEGIN { OFS = FS = "\t" }
{
count = $(NF - 1)
key = $1
}
key != previous {
if (previous != "")
print previous, sum
sum = 0
}
{
sum += count
previous = key
}
END {
if (previous != "")
print previous, sum
}
Эта awk
программа анализирует поле «счетчик» (предпоследнее поле )в count
, затем использует первое поле в качестве «ключа» для последующего сравнения с ключом предыдущей строки.. Это первый блок после блока BEGIN
(, который просто устанавливает разделители ввода и вывода ).
Если ключ отличается от ключа в предыдущей строке, это означает, что мы сейчас смотрим на какой-то другой набор слов. Выведите ключ и сумму предыдущей строки и сбросьте сумму.
Для всех строк увеличьте сумму на счет от этой строки и обновитеprevious
(мы закончили с этой строкой, поэтому key
этой строки являетсяprevious
)следующей.
В конце вывести информацию для последней строки данных.
Вы должны запустить это, используя awk -f script.awk inputfile
.
Как «один -лайнер»:
awk -F '\t' 'BEGIN{OFS=FS} {c=$(NF-1);k=$1} k!=p {if(p!="")print p,s;s=0} {s+=c;p=k} END {if(p!="") print p,s}' file