Unix shell - 如何按行数过滤掉文件?

时间:2014-07-28 20:06:11

标签: bash shell unix scripting

我正在尝试使用以下代码提取行数大于x的所有文件。

for i in massive*;
do
 if [ wc -l $i | cut -d ' ' -f 1 > 50 ]; then
     mv $i subset_massive_subcluster_num_gt50/;
 fi; 
done

但是每次进入循环时我都会收到以下错误:

cut: ]: No such file or directory
-bash: [: missing `]'

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

改变这个:

for i in massive*;
do
 if [ wc -l $i | cut -d ' ' -f 1 > 50 ]; then
     mv $i subset_massive_subcluster_num_gt50/;
 fi; 
done

对此:

for i in massive*;
do
    if [ "$(wc -l "$i" | cut -d ' ' -f 1)" -gt 50 ]; then
        mv "$i" subset_massive_subcluster_num_gt50/;
    fi; 
done

答案 1 :(得分:1)

也许你可以试试:

for file in massive*
do
    [[ $(grep -c '' "$file") > 50 ]] && echo mv "$file" subset_massive_subcluster_num_gt50/
done

grep -c ''wc -l | cut

更好(更安全)

以上是“干跑”。如果满意,请删除echo