比较awk结果的数量不正确

时间:2019-09-22 04:48:29

标签: awk

我使用awk来获取多个文件的字段数,然后使用if [[ ]]来判断字段数是否等于确切的数字,如果是,则返回文件名。

代码如下:

for file in /root/TB_MOVIL_CDR/incorrect_files/*
do
  num=$(awk -F '|' '{print NF}' $file)
  if [[ $num -eq 24 ]];then
    echo $file
  fi
done

但是如果发现结果不正确,我很困惑, if [[ $num -eq 24 ]]的语法错误?

1 个答案:

答案 0 :(得分:0)

在使用awk时不需要bash命令,请尝试以下操作:

awk -F'|' 'NF==24 {print FILENAME}' /root/TB_MOVIL_CDR/incorrect_files/*

这将测试每个文件的每一行中的字段数是否为24,并且如果找到包含24个字段的行,则将打印文件名。注意:如果有几个文件具有24个字段,它将多次打印文件名。如果需要,可以避免这种情况。

您可以使用此gnu awk为具有24个字段的每个文件仅打印一次文件名(由于ENDFILE功能而导致的文件名):

awk -F'|' 'NF==24 {f=1} ENDFILE {if (f) print FILENAME;f=0}' /root/TB_MOVIL_CDR/incorrect_files/*

较短的gnu awk,每个文件打印一次文件名。

awk -F'|' 'NF==24 {print FILENAME;nextfile}' /root/TB_MOVIL_CDR/incorrect_files/*