比较awk结果的数量不正确

比较awk结果的数量不正确,awk,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 但如果发现结果不正确,我很困惑, 如果[[$num-eq 24]]的语法错误?使用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
但如果发现结果不正确,我很困惑,
如果[[$num-eq 24]]的语法错误?

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

awk -F'|' 'NF==24 {print FILENAME}' /root/TB_MOVIL_CDR/incorrect_files/*
这将测试每个文件的每一行中是否有24个字段,如果找到一行有24个字段,它将打印文件名。注意:如果有多个文件包含24个字段,则会多次打印文件名。如果需要,这是可以避免的

您可以使用此
gnu awk
为每个文件打印一次文件名,每个文件有24个字段(由于ENDFILE函数,为gnu):

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

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

[[$num-eq 24]]
可以,但是如果您的文件有多行,您将使用多个数字填充
num
,这将使
[$num-eq 24]
阻塞…哦,我明白您的意思了,谢谢
awk -F'|' 'NF==24 {print FILENAME;nextfile}' /root/TB_MOVIL_CDR/incorrect_files/*