Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash AWK多字段分隔符|对字段中发现的不同模式进行计数_Bash_Awk - Fatal编程技术网

Bash AWK多字段分隔符|对字段中发现的不同模式进行计数

Bash AWK多字段分隔符|对字段中发现的不同模式进行计数,bash,awk,Bash,Awk,下午好 1.AWK多字段分离器 我的第一个问题是,是否有两个字段分隔符一旦定位为分隔符1的字段,我如何进入不是第二个分隔符1的字段?例如: 命令 zcat /home/technic/scripts/informe/datos/datos* \ | egrep -m1 "\|435\|t|\|0\|t"| grep ";CI[0-9]" \ | awk -F "[|;]" '{print $17}' **record $17 (FS="|")** 2013-08-04;2013-08-10

下午好

1.AWK多字段分离器

我的第一个问题是,是否有两个字段分隔符一旦定位为分隔符1的字段,我如何进入不是第二个分隔符1的字段?例如:

命令

zcat  /home/technic/scripts/informe/datos/datos* \
| egrep -m1 "\|435\|t|\|0\|t"| grep ";CI[0-9]" \
| awk -F "[|;]" '{print $17}'

**record $17 (FS="|")**

2013-08-04;2013-08-10;CI6785,;HG=S;BD=S;AD=2,;NI=1,;SA,;TH,;HB=S;RG=S;PO=S;VI=S;
我想买CI6785

我之所以需要这样做,有一个非常具体的原因,因为awk命令有各种各样的过滤器,其中大多数过滤器都是由“|”剪切的,只有在某些情况下,在同一个awk上通过“;”

2.统计字段中发现的不同模式

zcat  /home/technic/scripts/informe/datos/datos* \
| egrep -m1 "\|435\|t|\|0\|t"| grep ";CI[0-9]" \
| awk -F "[|;]" '{print $17}'

**record $17 (FS="|")**

2013-08-04;2013-08-10;CI6785,;HG=S;BD=S;AD=2,;NI=1,;SA,;TH,;HB=S;RG=S;PO=S;VI=S;
此案例希望具有与以下类似的行为:

{!a["ERR|"$3"|"$15]++ || !a["IPS|"$18]++ || !a["HTTPS|"$22]++};
for(i in a) print a[i]"|"i;
--这将返回找到的每个不同记录的计数

如果我这样做:

zcat  /home/technic/scripts/informe/datos/datos* \
| awk -F "|" --posix '!match($0, / ([0-9]{2}:){2}/);{print substr($0, RSTART, RLENGTH)}' \
| sort | uniq -c
我得到以下结果(部分):

这基本上给了我找到的每一分钟的计数,现在我想把它作为第一个例子,而不必运行sort和uniq

我需要这个工作,以便能够添加另一个比较条款

请帮忙,谢谢

忘了把整个awk放进去看图片:

for DATO in {1..3}  
do       
 DATOS=$(zcat  /home/technic/scripts/informe/datos/datos"$DATO"_"$AGENCIA".tmp.gz | grep "AG|$AGENCIA" | awk -F "|" --posix 'BEGIN \
    { \
        CI=0 ; CI5 =0; CI7 =0; CI10 =0; CI20 =0; \
        H=0 ; H5 =0; H7 =0; H10 =0; H20 =0; \
        A=0 ; A5 =0; A7 =0; A10 =0; A20 =0; \
        G=0 ; G5 =0; G7 =0; G10 =0; G20 =0; \
    } \

    {!a["ERR|"$3"|"$15]++ || !a["IPS|"$18]++ || !a["HTTPS|"$22]++}; \
    /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;CI[0-9]{1,}/ {CI++} ; \
    CI > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;CI[0-9]{1,}/ && $14 < 5000 {CI5++} ; \
    CI > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;CI[0-9]{1,}/ && $14 >= 5000 && $14 < 7000 {CI7++} ; \
    CI > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;CI[0-9]{1,}/ && $14 >=7000 && $14 < 10000 {CI10++} ; \
    CI > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;CI[0-9]{1,}/ && $14 >=10000&& $14 < 20000 {CI20++} ; \

    /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;H[0-9]{1,}/ {H++} \
    H > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;H[0-9]{1,}/ && $14 < 5000 {H5++} ; \
    H > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;H[0-9]{1,}/ && $14 >= 5000 && $14 < 7000 {H7++} ; \
    H > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;H[0-9]{1,}/ && $14 >=7000 && $14 < 10000 {H10++} ; \
    H > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;H[0-9]{1,}/ && $14 >=10000&& $14 < 20000 {H20++} ; \

    /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;A[0-9]{1,}/ {A++} \
    A > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;A[0-9]{1,}/ && $14 < 5000 {A5++} ; \
    A > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;A[0-9]{1,}/ && $14 >= 5000 && $14 < 7000 {A7++} ; \
    A > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;A[0-9]{1,}/ && $14 >=7000 && $14 < 10000 {A10++} ; \
    A > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;A[0-9]{1,}/ && $14 >=10000&& $14 < 20000 {A20++} ; \

    /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;G[0-9]{1,}/ {G++} \
    G > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;G[0-9]{1,}/ && $14 < 5000 {G5++} ; \
    G > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;G[0-9]{1,}/ && $14 >= 5000 && $14 < 7000 {G7++} ; \
    G > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;G[0-9]{1,}/ && $14 >=7000 && $14 < 10000 {G10++} ; \
    G > 0 && /\|GetAvail/ && /\|435\|t|\|0\|t/ && $17 ~ /;G[0-9]{1,}/ && $14 >=10000&& $14 < 20000 {G20++} ; \
    END {
    if (CI > 0){ print "DISPOCI|"CI"|"CI5"|"(CI5*100/CI)"|"CI7"|"(CI7*100/CI)"|"CI10"|"(CI10*100/CI)"|"CI20"|"(CI20*100/CI); } \
    if (H > 0){ print "DISPOH|"H"|"H5"|"(H5*100/H)"|"H7"|"(H7*100/H)"|"H10"|"(H10*100/H)"|"H20"|"(H20*100/H); } \
    if (A > 0){ print "DISPOA|"A"|"A5"|"(A5*100/A)"|"A7"|"(A7*100/A)"|"A10"|"(A10*100/A)"|"A20"|"(A20*100/A); } \
    if (G > 0){ print "DISPOG|"G"|"G5"|"(G5*100/G)"|"G7"|"(G7*100/G)"|"G10"|"(G10*100/G)"|"G20"|"(G20*100/G); } \
    for(i in a) print a[i]"|"i; \
    }';)" "
    echo ${DATOS[@]} | sed "s/[ ][ ]*/\n/g" | grep 'DISPO'
    echo "todos los datos en array de dispos ++++++++++++++++++++++"
for REC in $(echo ${DATOS[@]} | sed "s/[ ][ ]*/\n/g" | grep 'DISPO')
do
    echo $REC | awk -F "|" '{print $1}'
    if [ -z ${DISPO[$(echo $REC | awk -F "|" '{print $1}')]} ];then
        echo "no ha encontrado añado registro ++++++++++++++++++++++++"
        DISPO[$(echo $REC | awk -F "|" '{print $1}')]=$(echo $REC | awk -F "|" '{print $2"|"$3"|"$4"|"$5"|"$6"|"$7"|"$8"|"$9"|"$10}')
        echo ${DISPO[$(echo $REC | awk -F "|" '{print $1}')]}"<----------------- valor dentro de array"
    else
       echo "na encontrado sumo registro ++++++++++++++++++++++++"
       PARAM1=$(($(echo ${DISPO[$(echo $REC | awk -F "|" '{print $1}')]} | awk -F "|" '{print $1}') + $(echo $REC | awk -F "|" '{print $2}'))); echo "$PARAM1<------------parametro 1"
       PARAM2=$(($(echo ${DISPO[$(echo $REC | awk -F "|" '{print $1}')]} | awk -F "|" '{print $2}') + $(echo $REC | awk -F "|" '{print $3}'))); echo "$PARAM2<------------parametro 2"
       PARAM3=$(($(echo ${DISPO[$(echo $REC | awk -F "|" '{print $1}')]} | awk -F "|" '{print $4}') + $(echo $REC | awk -F "|" '{print 5}'))); echo "$PARAM3<------------parametro 3"
       PARAM4=$(($(echo ${DISPO[$(echo $REC | awk -F "|" '{print $1}')]} | awk -F "|" '{print $6}') + $(echo $REC | awk -F "|" '{print $7}'))); echo "$PARAM4<------------parametro 4"
       PARAM5=$(($(echo ${DISPO[$(echo $REC | awk -F "|" '{print $1}')]} | awk -F "|" '{print $8}') + $(echo $REC | awk -F "|" '{print $9}'))); echo "$PARAM5<------------parametro 5"
       PORC1=$(echo "scale=2;($PARAM2*100)/$PARAM1" | bc);PORC2=$(echo "scale=2;($PARAM3*100)/$PARAM1" | bc);PORC3=$(echo "scale=2;($PARAM4*100)/$PARAM1" | bc);PORC4=$(echo "scale=2;($PARAM5*100)/$PARAM1" | bc)
       DISPO[$(echo $REC | awk -F "|" '{print $1}')]="$PARAM1|$PARAM2|$PORC1|$PARAM3|$PORC2|$PARAM4|$PORC3|$PARAM5|$PORC4"                          
    fi
done
for REC in $(echo ${DATOS[@]} | sed "s/[ ][ ]*/\n/g" | grep 'ERR|')
do
    echo "$REC"
    echo "------- ERR -------"
done
for REC in $(echo ${DATOS[@]} | sed "s/[ ][ ]*/\n/g" | grep 'IPS|')
do
    echo "$REC"
    echo "------- IPS -------"
done    
for REC in $(echo ${DATOS[@]} | sed "s/[ ][ ]*/\n/g" | grep 'HTTPS|')
do
    echo "$REC"
    echo "------- HTTPS -------"
done         
done
{1..3}中DATO的

做
DATOS=$(zcat/home/technic/scripts/informe/DATOS/DATOS“$DATO”\$AGENCIA.tmp.gz | grep“AG |$AGENCIA”| awk-F“|”--posix“BEGIN”\
{ \
CI=0;CI5=0;CI7=0;CI10=0;CI20=0\
H=0;H5=0;H7=0;H10=0;H20=0\
A=0;A5=0;A7=0;A10=0;A20=0\
G=0;G5=0;G7=0;G10=0;G20=0\
} \
{!a[“ERR |”$3”|“$15]+++| |!a[“IPS |”$18]++| |!a[“HTTPS |”$22]+}\
/\|GetAvail/&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/$17~/$CI[0-9]{1,}/{CI++\
CI>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
CI>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
CI>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
CI>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
/\|GetAvail/&&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/$17~/$H[0-9]{1,}/{\
H>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
H>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
H>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
H>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
/\|GetAvail/&&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
A>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
A>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
A>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
A>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
/\|GetAvail/&&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\/$17~/$G[0-9]{1,}/{G++\
G>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
G>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
G>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
G>0&/\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
结束{
如果(CI>0){打印“DISPOCI”|“CI”|“CI5”|(CI5*100/CI)|“CI7”|(CI7*100/CI)|“CI10”|(CI10*100/CI)|“CI20”|(CI20*100/CI);}\
如果(H>0){打印“DISPOH”|“H”|“H5”|(H5*100/H)|“H7”|(H7*100/H)|“H10”|(H10*100/H)|“H20”|(H20*100/H)}\
如果(A>0){打印“DISPOA |”A“|”A5“|”(A5*100/A)”|“A7”|(A7*100/A)”|“A10”|(A10*100/A)”|“A20”|(A20*100/A)}\
如果(G>0){print“DISPOG |”、“G”|“G5”|(G5*100/G);“G7”|(G7*100/G);“G10”|(G10*100/G);“G20”|(G20*100/G);}\
对于(a中的i)打印a[i]“|”i\
}';)" "
echo${DATOS[@]}sed“s/[[]*/\n/g”| grep'DISPO'
echo“todos los datos en array de dispos+
对于美元中的REC(echo${DATOS[@]}sed“s/[[]]*/\n/g”| grep'DISPO')
做
echo$REC | awk-F“|”{print$1}”
如果[-z${DISPO[$(echo$REC|awk-F“|”{print$1}')]};然后
echo“不需要注册”
DISPO[$(echo$REC | awk-F“|”{print$1}')]=$(echo$REC | awk-F“|”{print$2”|“$3”|“$4”|“$5”|“$6”|“$7”|“$8”|“$9”|“$10}”)

echo${DISPO[$(echo$REC | awk-F“|”{print$1}')]}尝试将字段拆分为数组:

... | awk -F"|" '{split($17,a,";"); print a[3]}'

尝试将字段拆分为数组:

... | awk -F"|" '{split($17,a,";"); print a[3]}'

要将字段拆分为子字段,请使用awk的拆分功能:

要从第二个主字段打印第三个子字段,如
1 | 2;3;4 | 5
中的
4

echo '1|2;3;4|5' | awk -F'|' '{ split($2, array, /;/); print array[3]; }'

要将字段拆分为子字段,请使用awk的拆分功能:

要从第二个主字段打印第三个子字段,如
1 | 2;3;4 | 5
中的
4

echo '1|2;3;4|5' | awk -F'|' '{ split($2, array, /;/); print array[3]; }'
下午好

非常感谢您的支持,不知何故,它帮助了我很多。我最终得到了基于您的帮助的解决方案,下面是对它感兴趣的人的解决方案:

cat/xmllogs/logs/xml/stats.log | awk-F“|”'/GetAvail/&&/AG\| 3857928/{split($17,b,“;”);!a[b[1]]+};END{for(a中的i)打印a[i]“|”i;}

这允许您获得针对给定模式找到的不同值的计数

干杯,谢谢!保重

下午好

非常感谢您的支持,不知何故,它帮助了我很多。我最终得到了基于您的帮助的解决方案,下面是对它感兴趣的人的解决方案:

cat/xmllogs/logs/xml/stats.log | awk-F“|”'/GetAvail/&&/AG\| 3857928/{split($17,b,“;”);!a[b[1]]+};END{for(i in a)打印