请,我有一个日志文件" log1.txt"包含由字符" |"分隔的字段我想根据具体要求检索行 我有另一个配置文件" code.conf"或者我把字段中的值放在5中。 这是日志文件:
+++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++
abc|2| 11| 3| 1000| 0|scql| 29| | | 0| 0| plk| stv| 2| 0
trc|2| 20| 3| 1200| 0|tkgl| 0| pajd|jahd| 0| 0| klm|fdkl|1|0
klm|2| 0| 3| 1300| 0|mlpo| 0| | | 0| 0| qnhd| pkjs| 2| 0
klm|2| 0| 3| 1600| 0|mlpo| 22| | | 0| 0| qnhd| pkjs| 2| 0
+++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++
这是配置文件" code.conf"
+++++++++++++++++++++++++++++++++++++++++++++++ ++++++
1000
1300
1200
+++++++++++++++++++++++++++++++++++++++++++++++ ++++++
现在我想从日志文件中检索对应于这个条件的行:
字段2等于" 2"
字段3等于" 0"或" 20"
字段4等于" 3"
字段8等于" 0"
字段5必须包含配置文件中声明的值之一。
这是我尝试做的事情:
#!/bin/sh
cat /home/code.conf | awk '{ print "if (substr($2,1,1)==\""2"\" && substr($3,1,1)==\""0"\" || substr($3,1,2)==\""20"\" && substr($4,1,1)==\""3"\" && substr($8,1,1)==\""0"\" && substr($5,1,"length($5)")==\""$1"\" ) { print $0};"}'> /home/awk-code.awk
sed -i '1i{' /home/awk-code.awk
echo "}" >> /home/awk-code.awk
awk -f /home/awk-code.awk /home/log1.txt > /home/log2.txt
答案 0 :(得分:0)
awk命令可以在一个命令中处理所有这些:
awk -F' *\\| *' 'FNR==NR {a[$1];next}
$2==2 && ($3==0 || $3==20) && $4==3 && $5 in a && $8==0' code.conf file
trc|2| 20| 3| 1200| 0|tkgl| 0| pajd|jahd| 0| 0| klm|fdkl|1|0
klm|2| 0| 3| 1300| 0|mlpo| 0| | | 0| 0| qnhd| pkjs| 2| 0