查找少于2000行的文本文件并删除它们

时间:2014-02-14 12:24:51

标签: bash shell awk

我有很多文本文件,只有一列。

某些文本文件有2000行(由数字组成),而另一些文本文件则少于2000行(也只包含数字)。

我想删除所有少于2000行的纺织品。

额外信息

少于2000行的文件不为空它们都有换行符直到第2000行。另外我的文件有一些复杂的名称,如:Nameofpop_chr1_window1.txt

我尝试使用awk来首先计算文本文件的行数,但因为每个文件都有换行符,所以我得到相同的结果,每个文件都有2000行。

awk 'END { print NR }' Nameofpop_chr1_window1.txt

提前致谢。

3 个答案:

答案 0 :(得分:4)

您可以使用此awk计算非空行:

awk 'NF{i++} END { print i }' Nameofpop_chr1_window1.txt

或者这个awk只计算那些仅数字

的行
awk '/^[[:digit:]]+$/ {i++} END { print i }' Nameofpop_chr1_window1.txt

删除所有少于2000行数的文件,请使用此awk:

for f in f*; do
    [[ -n $(awk '/^[[:digit:]]+$/{i++} END {if (i<2000) print FILENAME}' "$f") ]] && rm "$f"
done

答案 1 :(得分:0)

您可以使用expr $(cat filename|sort|uniq|wc -l) - 1cat filename|grep -v '^$'|wc -l它会为您提供每个文件的行数,并根据您决定要做什么

答案 2 :(得分:0)

您可以使用Bash:

for f in $files; do
    n=0
    while read line; do
        [[ -n $line ]] && ((n++))
    done < $f
    [ $n -lt 2000 ] && rm $f
done