从找到的文件列表中提取 n 到 m 行

从找到的文件列表中提取 n 到 m 行

最终我需要从每个子目录中的每个 CSV 中获取第 3-53 行。

我从一个文件中抓取了这些行,如下所示(不一定需要“cat”):

cat /[path]/[file].csv | head -53 | tail -51

和我需要的文件是这样的(“查找”必需的):

find /[path]/ -name "*.csv"

问题是我无法将两者联系在一起。有人可以把我推向正确的方向吗?

答案1

尝试这个:

find /path/to/file/ -maxdepth 1 -type f -name '*.csv' -print0 | while read -d '' -r file; do sed -n '3,53p' $file; done

请注意print0该选项会处理文件名中任何可能的空白字符。

答案2

如果我理解正确的话,我认为以下内容应该对您有所帮助。

脚本/行:

$ for csv_files in $(find /home/t1/ -name "*.csv"); do echo $csv_files ; done

输出:

/home/t1/t4/t4.csv
/home/t1/t1/t1.csv
/home/t1/t2/t2.csv
/home/t1/t3/t3.csv

echo您可以插入第二个命令来代替cat $csv_files | head -53 | tail -51

为了获得完成感,我将这echo行代码替换为:

$ for csv_files in $(find /home/t1/ -name "*.csv"); do cat $csv_files | head -53 | tail -51; done 

答案3

您可以使用 find 本身来完成此操作

find path -type f -name '*.csv' \
-exec sh -c 'for f; do head -n 53 "$f" | tail -n 51; done' _ {} + 

相关内容