检查文件是否给出了列数[重复]

问题描述 投票:2回答:2

这个问题在这里已有答案:

我有一些csv文件,如果列数是4通过文件我需要处理

file_1:

1,aa,bb,cc
2,dd,ee,ff
3,gg,hh,ii

file_2:

1,xx
2,yy
3,zz
4,xy

我正在使用awk

for file in file_1 file_2 ... file_n
do
    if [[ `awk -F"," 'NF==4' $file` ]]
    then
        #process
    else
        continue
    fi
done

我正在寻找一个解决方案

  • 不涉及子壳
  • 检查整个文件中的列数
  • 执行比上面的代码更好(如果可能)
bash shell csv awk delimited-text
2个回答
1
投票

你可以使用:

for f in file_1 file_2 file_n; do
   if awk -F, 'NF!=4{exit 1}' "$f"; then
      echo "good $f"
   else
      echo "bad $f"
   fi
done

这个awk退出时与1一起发现一个没有列不等于4的记录。


1
投票

解决方案1:如果你想检查任何一行是否没有4个字段并移动到下一个文件,那么下面的内容可以帮助你。

awk -F, 'NF!=4{nextfile} 1' File_*

解决方案2:如果您只想跳过那些没有4个字段的行,那么下面的内容可能对您有帮助。

awk -F, 'NF!=4{next} 1' File_*
© www.soinside.com 2019 - 2024. All rights reserved.