【问题标题】:awk commands in file gives error when executed in loop文件中的 awk 命令在循环中执行时会出错
【发布时间】:2018-06-12 09:16:09
【问题描述】:

file_data.txt

73|8|42.320000|1559260800000|1|9667|0.00|42.320000||1485613678440| 153|8|35.680000|1559260800000|1|10899|0.00|35.680000||1482480306523| 2503|8|93.390000|1559260800000|1|6106|0.00|93.390000||1484304241803| 2672|8|49.990000|1559260800000|1|7754|0.00|49.990000||1482064270543|

AWK_COMMANDS.txt

awk -F '|' '$2 == 3280 {print;}' file_data.txt
awk -F '|' '$2 == 3281 {print;}' file_data.txt

我在while循环下面运行

while read line
do
 $line
done < AWK_COMMANDS.txt

我遇到错误

awk: cmd. line:1: '$2 awk: cmd. line:1: ^ invalid char ''' in expression awk: cmd. line:1: '$2 awk: cmd. line:1: ^ invalid char ''' in expression

当我直接在控制台中执行相同的命令时,它可以工作。

我尝试转义和双引号。结果是一样的

【问题讨论】:

  • 这是不可以的。 ' ' 是扩展后的文字,而不是语法。
  • 为什么不直接运行bash AWK_COMMANDS.txt
  • bash AWK_COMMANDS.txt 工作。
  • mywiki.wooledge.org/BashFAQ/050 很好地了解(不)将命令放入变量中。
  • @Ashish,请问我的回答是否对您有帮助?

标签: linux bash shell awk scripting


【解决方案1】:

如果你想用普通的 bash 来做这个,你会写

while IFS='|' read -r first second rest; do
    case $second in
        3280|3281) echo "$first|$second|$rest" ;;
    esac
done < file_data.txt

但坚持使用 awk:它更简洁、可读性更强、速度更快。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 2016-10-23
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    相关资源
    最近更新 更多