gpt4 book ai didi

arrays - 逐行读取文件并与 shell 数组元素 : ksh 进行比较

转载 作者:行者123 更新时间:2023-12-01 12:42:18 26 4
gpt4 key购买 nike

我有一个 ID 数组,我想打印日志文件中与数组中包含的任何值匹配的行。输入文件格式如下,必须匹配的数字以粗体显示。

2014-04-22 05:42:17|SPPEventQueue_skl0.cpp(449 )|6|CG |DEBUG|Executing
2014-04-22 05:42:17|abc.cpp (253 )|6|USR|INFO |IN { Event::removeEvent
2014-04-22 05:42:17|cax.cpp (253 )|5|USR|INFO |removeEvent number = 46574731
2014-04-22 05:42:17|zaw.cpp (253 )|7|USR|INFO |Didn't find any Event.
2014-04-22 05:42:17|asdf.cpp (253 )|3|USR|INFO |OUT } Event
2014-04-22 05:42:17|abcd.cpp(367 )|8|CG |DEBUG|op Event::Queue::publish, directly
2014-04-22 05:42:17|efgh.cpp (253 )|11|USR|INFO |IN { Queue::Event
2014-04-22 05:42:17|xyz.cpp (253 )|4|USR|INFO |In removeEvent for eventNumber 46574731
2014-04-22 05:42:17|Event.cpp(503 )|6|CG |DEBUG|op Queue::Event::removeEvent optimized,
2014-04-22 05:42:17|form.cpp (253 )|1|USR|INFO |IN { Queue::EventQueue
2014-04-22 05:42:17|service.cpp(1242)|4|P |DEBUG|commitObject: Transaction 1285:5851 committed 2014-04-22 05:42:17|form.cpp (253 )|6|USR|INFO |removeEvent number = 46574731

下面的代码有一个数组来比较每一行中给定文件粗体值的每个元素。它读取文件的每一行,将上面以粗体显示的值与数组的每个元素进行比较。如果找到匹配项,该行将存储在输出文件中。它工作正常,但需要很长时间才能读取超过 10000 行并与每个数组元素进行比较。

while read -r line; do 
typeset CURTHREADID=echo "$line" | cut -d "|" -f 3
for index in ${THREADIDARR[@]}; do
if [ $CURTHREADID == $index ]; then
echo "$line" >> $OUTPUTFILE
break
fi
done
done < $INPUTFILE

我曾尝试使用 AWK 编写相同的代码,但它给我一个错误,我不知道我在哪里失败了。我需要帮助来使用 AWK 编写相同的内容,以便加快输出速度。这是我的尝试:

awk -v Thvar="$THREADIDARR" '
BEGIN{ command=cut -d "|" -f 3 }
{ CURTHREADID=getline | command
for(index in Thvar){
if(CURTHREADID == Thvar[index]){print;break;}
}}' $INPUTFILE

最佳答案

你可以试试:

awk -va="${THREADIDARR[*]}" '
{BEGIN {FS="|"; n=split(a,b," "); for (i=1; i<=n; i++) c[b[i]]=1}
$3 in c {print}' $INPUTFILE

关于arrays - 逐行读取文件并与 shell 数组元素 : ksh 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23242660/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com