我有一个这样的文件:(注意: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;