Другой подход awk
:
$ awk 'NR==FNR{a[$2]+=$3+$4; next} {b[$2]+=$3+$4;}
END{
for(i in a){
if(i in b && a[i]!=b[1]){
print "Unequal total for",i
}
}
}' input output
Unequal total for 1019
Unequal total for 1021
Unequal total for 1022
Или, если вам действительно нужен точный результат, который вы показываете в своем вопросе:
$ awk 'NR==FNR{a[$2]+=$3+$4; next} {b[$2]+=$3+$4;}
END{
for(i in a){
if(i in b && a[i]!=b[1]){
c[i]
}
}
printf "Unequal total for ";
for(i in c){printf "%s, ", i}
}' input output | perl -pe 's/,\s*$/\n/'
Unequal total for 1019, 1021, 1022
FNR
- это номер строки текущего файла, а NR
- это общий номер строки для всего ввода. Они равны только при чтении первого файла. Итак, NR == FNR {a [$ 2] + = $ 3 + $ 4; next}
добавит сумму 3-го и 4-го столбца к значению, связанному со 2-м столбцом в массиве a
, и сделает это только для первого файла. next
гарантирует, что мы перейдем к следующей строке и не выполним остальную часть скрипта для текущей строки.
{b [$ 2] + = $ 3 + $ 4;}
будет запущен, только если предыдущий не был запущен, если мы читаем второй файл. Он делает то же самое со значениями во втором файле, за исключением того, что сохраняет их в массиве b
.
Когда мы достигаем конца всего ввода, выполняется блок END {}
. Это будет перебирать все ключи в a
и, если они также являются ключами в b
, и их значение не то же самое, он распечатывает ключ.
Я обновил свой Amazon Linux(2014.03) до Amazon Linux(2016.09). Теперь elasticsearch работает нормально.
Вы не можете запустить elasticsearch
, потому что в системе присутствует зависший файл блокировки.
Достаточно удалить его с помощью:
sudo rm /var/lock/subsys/elasticsearch
Тогда вы сможете снова запустить elasticsearch
.
Если это происходит регулярно, я бы посоветовал изучить причины этого.