我有一个这样的文件:(注意:a*,B*,C*是占位符)。文件由;分隔

AAAA;BBBB;CCCCCCCC;DD;EEEEEEEE;FF;
AAA1;BBBBB;CCCC;DD;EEEEEEEE;FFFFF;
AAA3;BB;CCCC;DDDDDDDDD;EEEEEEE;FF;

我试图编写一个小脚本,计算分隔符;的出现次数,如果它小于或大于5,则将该行输出到文本文件。
delim=";"

while read line
do
    n_of_occ=$(grep -o "$delim" <<< "$line" | wc -l)

    if [[ $n_of_occ < 5 ]] || [[ $n_of_occ > 5 ]]
    then
        echo $line >> outfile
    fi
done

出于某种原因,这似乎不起作用,我的输出是混乱的。有人能帮助或提供一个不同的方法来解决这个问题吗?也许用Perl代替bash?

最佳答案

不幸的是,示例数据中的每一行都有六个分号,这意味着它们都应该被打印出来。但是,这里有一个单行Perl解决方案

$ perl -ne'print if tr/;// != 5' aaa.csv
AAAA;BBBB;CCCCCCCC;DD;EEEEEEEE;FF;
AAA1;BBBBB;CCCC;DD;EEEEEEEE;FFFFF;
AAA3;BB;CCCC;DDDDDDDDD;EEEEEEE;FF;

08-27 13:26