Как вы сказали, в корневом разделе не осталось места. Очистите его, чтобы освободить место, и попробуйте еще раз. Посмотрите в /tmp /var/tmp /var/log то, что вам больше не нужно. Кроме того, проверьте, находится ли ваш каталог /home также в корневом разделе. Если да, Dropbox может занять место в корневом разделе.
Либо разделители в вашем файле несовместимы (простые |
в строке заголовка, но "|"
после этого )либо разделитель последовательно |
, но цитирование полей непоследовательно (отсутствует открытый "
на первом поле и закрытие "
на последнем ).
В любом случае, когда вы устанавливаете -F'|'
, значения $2
анализируются как строки, такие как "1.1"
, которые преобразуются в числовое значение, равное нулю, когда вы пытаетесь выполнить над ними сложение.
Если ваша системная версия awk поддерживает регулярные выражения для разделителя полей, вы можете вместо этого использовать -F'"?\\|"?'
, который позволяет литералу ()|
иметь необязательные начальные и конечные кавычки:
$ awk -F'"?\\|"?' '{T+=$2} END { printf "%.2f\n", T }' demo.txt
3.30
Судя по ожидаемому результату, вы добавляете столбцы TAG и VAL.
Я заметил, что ваш ввод недействителен в формате CSV. Вы не можете -цитировать поля, например 12.11, или можете цитировать поля, например "12.11". Половина -их цитирование недействительно.
Два способа сделать это, в том числе избежать добавления «числовых» значений из заголовков столбцов. (Ничего из этого не тестировалось.)
(a )Определите разделитель полей, соответствующий действительности.
awk '-F"[|]"' 'NR == 1 { next; }
{ T3 += $3; T4 += $4; }
END { printf ("T3 %.2f T4 %.2f\n", T3, T4); }'
(b )Исправьте каждое поле перед его использованием.
awk '-F|' 'NR == 1 { next; }
{ gsub ("\042", "", $3); T3 += $3; }
{ gsub ("\042", "", $4); T4 += $4; }
END { printf ("T3 %.2f T4 %.2f\n", T3, T4); }'
Если это пример, и вы планируете сделать это для большего количества столбцов, я бы, вероятно, превратил T в массив, а сложение — в функцию:
awk '-F|' 'NR == 1 { next; }
function Sum (f) {
gsub ("\042", "", $(f)); T[f] += $(f);
}
{ Sum(2); Sum(3); Sum(5); Sum(11); }
END {
for (f = 1; f < 20; ++f)
if (f in T) printf ("T%d %.2f\n", f, T[f]);
}'