2014-02-14 65 views
3

我有很多文本文件,只有一列。查找少于2000行的文本文件并删除它们

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

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

EXTRA信息

有低于2000线,不是空的,他们都换行,直至2000年连续加我的文件有一些复杂的名称,如该文件:Nameofpop_chr1_window1.txt

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

awk 'END { print NR }' Nameofpop_chr1_window1.txt 

在此先感谢。

回答

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 
+0

由于它的工作。但是,我怎样才能保存所有超过2000行数字的文件? – JM88

+0

查看更新后的代码,以删除少于2000行的数字的所有文件。 – anubhava

+0

所有的文件都被删除了,包括那些2000行的文件 – JM88

0

可以使用expr $(cat filename|sort|uniq|wc -l) - 1cat filename|grep -v '^$'|wc -l它会给你每个文件的行数,并根据您decidewhat做

0

您可以使用击:

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