我将关键字指定为变量,并且需要使用该变量从文件中唤醒并循环。该文件有数百万行。
我尝试了以下代码。
DEVICE="DEV2"
while read -r line
do
echo $line
X_keyword=`echo $line | cut -d ',' -f 2 | grep -w "X" | cut -d '=' -f2`
echo $X_keyword
done <<< "$(grep -w $DEVICE $config)"
log="Dev2_PRT.log"
while read -r file
do
VALUE=`echo $file | cut -d '|' -f 1`
HEADER=`echo $VALUE | cut -c 1-4`
echo $file
if [[ $HEADER = 'PTR:' ]]; then
VALUE=`echo $file | cut -d '|' -f 4`
echo $VALUE
XCOORD+=($VALUE)
((X++))
fi
done <<< "awk /$X_keyword/ $log"
预期结果:
日志文件的内容如下: PTR:1 | 2 | 3 | 4 | X_keyword PTR:1 | 2 | 3 | 4 | Y_rest .....
过滤X_keyword并获取字段4。
答案 0 :(得分:2)
不幸的是,您的shell脚本只是解决此问题的错误方法(出于某些原因,请参见https://unix.stackexchange.com/q/169716/133219),因此您应该将其放在一旁并重新开始。
为演示该解决方案,让我们创建一个示例输入文件:
$ seq 10 | tee file
1
2
3
4
5
6
7
8
9
10
和一个用于容纳正则表达式的shell变量,该正则表达式是5、6或7个字符的字符列表:
$ var='[567]'
现在,根据上述输入,以下是如何g/re/p pattern as variable and count how many results
的解决方案:
$ awk -v re="$var" '$0~re{print; c++} END{print "---" ORS c+0}' file
5
6
7
---
3
如果这还不是您所需要的,请编辑您的问题以阐明您的要求,并提供简洁,可测试的样本输入和预期输出。