【问题标题】:Awk Sum skipping Special Character Row跳过特殊字符行的 Awk Sum
【发布时间】:2016-02-15 10:00:51
【问题描述】:

我正在尝试获取文件中特定列的总和,即第 18 列。 使用 awk 命令和 Printf 以正确的十进制格式显示它。

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

上面的命令正在跳过文件中在第 5 列 - RÉPARATIONS 之一中具有特殊字符的那些行。因此,Awk 跳过这些行并且不考虑该行的总和。请帮助如何解决此问题以获取所有行的总和。

【问题讨论】:

  • 跳过 它们,还是编码文件(UTF-8?ISO8859-1?文件如何编码以允许非 ASCII 字符?)导致 awk错误计数字段?试着抓住有问题的行,看看$18是否是你所期望的。

标签: awk


【解决方案1】:

您的示例中缺少一个背部抽动,应该是:

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

但你不应该使用 back tic,你应该使用括号 $(code)
用cat向awk输入数据也是错误的做法,在awk后面加pat

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

这可能会解决您的问题,但会提供更正确的代码。
如果您将输入文件提供给我们,将有助于我们理解问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多