Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:在少于n行的目录中查找文件_Bash - Fatal编程技术网

Bash:在少于n行的目录中查找文件

Bash:在少于n行的目录中查找文件,bash,Bash,我有一个包含多个文件的目录: filename_10-1.txt filename_10-2.txt ... filename_10-1000.txt filename_20-1.txt filename_20-2.txt ... filename_20-1000.txt ... filename_600-1000.txt 我想列出所有行数少于文件名中第一个数字两倍的文件(例如,filename_10-874应该有20行(2*10行),而filename_40-684应该有80行(2*40行)

我有一个包含多个文件的目录:

filename_10-1.txt
filename_10-2.txt
...
filename_10-1000.txt
filename_20-1.txt
filename_20-2.txt
...
filename_20-1000.txt
...
filename_600-1000.txt
我想列出所有行数少于文件名中第一个数字两倍的文件(例如,
filename_10-874
应该有20行(2*10行),而
filename_40-684
应该有80行(2*40行))

方法

步骤1:我能够计算单个文件中的行数,例如:

wc -l filename_10-1.txt
步骤2:查找所有文件中的行数

for i in $(find filename_* -type f); 
    do wc -l $i; 
done
步骤3:仅列出包含的行数少于其文件名状态的文件

我偶然发现了这一点,但是,我无法修改代码以满足我的需要

问题


如何列出文件名中行数少于某个数字的所有文件?

如果行数超过给定数字,可以使用awk计算行数并打印文件名。使用Gnu Awk,您可以执行以下操作:

awk 'BEGINFILE { f=FILENAME; n=gsub(/^.*_/,"",f)*2 }
     (FNR == n) { nextfile }
     ENDFILE{ if (FNR < n) print FILENAME }' filename_*.txt
awk'beginfle{f=FILENAME;n=gsub(/^.*.\u/,“”,f)*2}
(FNR==n){nextfile}
ENDFILE{if(FNR
您可以使用以下脚本:

shopt -s extglob

for f in *.txt; do
   n="${f//@(*_|-*)}" # extract first number
   (( $(wc -l < "$f") < 2*$n )) && echo "$f" # list files with less lines than 2*$n
done
shopt-s extglob
对于*.txt中的f;做
n=“${f/@(*|-*)}”提取第一个数字
($(wc-l<“$f”)<2*$n)和&echo“$f”#列出行数小于2*$n的文件
完成

扩展的glob语法(
@(*|-*)
)如中所述。在此代码中,
*.
删除所有文本,直到我们得到
.
,然后
-*
删除
-
之后的所有文本这是否回答了您的问题?