2013-12-05 3 views
0

Я пытаюсь взять сумму определенного столбца в файле, то есть в столбце 18. Используя команду awk вместе с Printf, чтобы отобразить ее в надлежащем десятичном формате.Awk Sum skipping Special Character Row

SUM=`cat ${INF_TARGET_FILE_PATH}/${EXTRACT_NAME}_${CURRENT_DT}.txt|awk -F"" '{s+=$18}END{printf("%24.2f\n", s)}' 

Над командой пропускает эти строки в файле, который имеет особый характер в одном из столбцов 5 - репараций. Следовательно, Awk пропускает эти строки и не рассматривает сумму для этой строки. Пожалуйста, помогите решить эту проблему, чтобы взять сумму всех строк.

+0

Это * пропуская * их или кодированный файл (UTF-8? ISO8859-1? Как кодируется файл, чтобы разрешать символы, отличные от ASCII?) Вызывают ошибки awk для ошибочных полей? Попробуйте схватить только строки, о которых идет речь, и посмотрите, что вы ожидаете от $ 18. – torek

ответ

1

Существует не хватает спины тики в вашем примере, должны быть:

SUM=`cat ${INF_TARGET_FILE_PATH}/${EXTRACT_NAME}_${CURRENT_DT}.txt|awk -F"" '{s+=$18}END{printf("%24.2f\n", s)}'` 

Но вы не должны использовать обратно тики, вы должны использовать круглые скобки $(code)
Использование кошке для ввода данных в awk также неправильный путь чтобы сделать это, добавьте погладить после awk

SUM=$(awk -F"" '{s+=$18} END {printf "%24.2f\n",s}' ${INF_TARGET_FILE_PATH}/${EXTRACT_NAME}_${CURRENT_DT}.txt) 

это может решить вашу проблему, но дает более правильный код.
Если вы дадите нам свой входной файл, это поможет нам понять проблему.