2014-02-14 104 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 
相關問題