我使用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 ]]
的语法错误?
答案 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/*