Что ж, мне помог @stevepusser с forum.debian.net :)
Уловка состоит в том, чтобы создать пакет из ppa. Официальное руководство с гораздо более подробной информацией можно найти здесь: debian / wiki / CreatePackageFromPPA
- Установите Debian SDK: apt-get install devscripts build-essential
- Добавьте URL-адрес источника PPA в свой sources.list:
deb-src
, выбрав «Добавление этого PPA в вашу систему»> «Технические подробности об этом PPA» echo "deb-src http: // ppa. launchpad.net/powernap/ppa/ubuntu utopic main "> /etc/apt/sources.list.d/powernap.list
apt-key adv --keyserver keyserver.ubuntu .com --recv-keys
apt-get update
cd ~ && mkdir powernap && cd powernap
apt- получить исходный код --build powernap
Awk
раствор:
awk 'BEGIN{ FS=OFS="|" }
{ a[$1 FS $2 FS $3 FS $4 FS $5 FS $6] += $7 }
END{ for (i in a) print i, a[i] }' file
Выход:
11|ABCD|19900101123123445455|555|AAA|50505050|9004230
13|ABCD|201803010YYY66666666|600|ETC|20180300|84099
Идея правильная, но для такого требования вы создаете хеш-ключ в качестве значений, кроме последнего столбца, и используете этот ключ для суммирования значений в последнем столбце. После обработки всех строк в предложении END
мы печатаем суммированные значения
awk '
BEGIN {FS=OFS="|"} {
hashKey = ""
for(i=1;i<=(NF-1); i++) {
hashKey = ( hashKey ? (hashKey FS $i):$i )
}
total[hashKey]+=$NF
}
END { for ( j in total ) print j, total[j] }
' file
С помощью команды GNUdatamash
:
$ datamash -t'|' -s -g 1,2,3,4,5,6 sum 7 < infile
11|ABCD|19900101123123445455|555|AAA|50505050|9004230
13|ABCD|201803010YYY66666666|600|ETC|20180300|8409
Вdatamash v1.2+
вы также можете указать диапазон столбцов.
$ datamash -t'|' -s -g 1-6 sum 7 < infile
Или самая короткаяAWK
альтернатива, и где у вас было N столбцов, и вы не должны указывать все один за другим:
awk -F'|' '{x=$NF;NF--; a[$0]+=x} END{for(i in a) print i, a[i]}' OFS='|' infile
и перл
perl -lne '
$sum{$1} += $2 if /(.*)\|(.*)/
} END {
print "$_|$sum{$_}" for keys %sum
' file