2017-02-17 14 views
2

У меня есть файл строк:Разбивает строку на разделитель и просуммировать последнее поле

XC:a:1 
XC:b:2 
XC:c:0 

и так далее. Я хочу разбить его на второй : и суммировать все целые числа. Например, для вышеуказанного списка я хочу сделать 1+2+0+...

Я пробовал cut -d ":", но он дает только поле XC.

+0

Нет, они находятся в разных строках – Ssank

+0

, если мой ответ казался полезным ниже, помечайте ответ _accepted_ с '^' для ответа, так что этот пост может быть полезен для кого-то, посещающего в будущем – Inian

ответ

0

Если у вас установлен perl; вы можете сделать это в одной строке.

perl -F/:/ -ane 'END {print "$x\n"} $x += $F[2]' inputFile 

-F/:/ sets colon as the split separator works with -a 
-a  autosplit mode with -n splits each line into @F 
-n  assume "while (<>) { ... }" loop around program 
1

Вы можете использовать cut и paste таким образом:

paste -s -d+ <(cut -f3 -d: file) | bc 
  • <(cut ...) => использует замену процесса для отправки распакованные номера в paste
  • paste -s -d+ => преобразует числа на несколько линий этот формат 1+2+3, который затем подается на bc для математики
+0

Кажется, что сделать 'cut -f3 -d: файл | paste -s -d + - | bc' –

0

Это можно сделать с помощью awk, попробуйте этот вариант или вы можете заменить $ NF на номер столбца.

AWK -F: '{сумма + = $ NF} END {печать сумма}' имя_файла

0

Использование Python:

python -c "print(sum(int(line.split(':')[-1]) for line in open('filename')))" 

 Смежные вопросы

  • Нет связанных вопросов^_^