我有很多文本文件,只有一列。
某些文本文件有2000行(由数字组成),而另一些文本文件则少于2000行(也只包含数字)。
我想删除所有少于2000行的纺织品。
额外信息
少于2000行的文件不为空它们都有换行符直到第2000行。另外我的文件有一些复杂的名称,如:Nameofpop_chr1_window1.txt
我尝试使用awk来首先计算文本文件的行数,但因为每个文件都有换行符,所以我得到相同的结果,每个文件都有2000行。
awk 'END { print NR }' Nameofpop_chr1_window1.txt
提前致谢。
答案 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) - 1
或cat 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