文件中的awk命令在循环中执行时会出错

问题描述 投票:1回答:2

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 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

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

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

linux bash shell awk scripting
2个回答
0
投票

这个简单的命令将帮助您解决问题。

awk -F '|' '$2 == 3280 || $2 == 3281' file_data.txt

0
投票

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

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

但坚持使用awk:它更简洁,同样可读,而且速度更快。

© www.soinside.com 2019 - 2024. All rights reserved.