![创建并执行脚本](https://linux22.com/image/93430/%E5%88%9B%E5%BB%BA%E5%B9%B6%E6%89%A7%E8%A1%8C%E8%84%9A%E6%9C%AC.png)
给定任务:使用 head 和 tail,编写一个命令来提取文件的第二部分(即数据部分)。
*我发现:tail -n 52 (path) | head -n 51
,会给我正确的头和尾命令来提取此部分。
将其转换为名为 extractdata 的可执行脚本。然后,使用 find 和 extractdata,编写一个命令来获取月份目录中所有 .csv 文件的第二部分,并将输出放入名为 polls.csv 的文件中。
*到目前为止,我已经弄清楚如何执行以下操作,vim extractdata
在提取数据中:
#!/bin/sh
#----------------------------------------------------------------------------
#A script used to extract the second section of a file (i.e. the data section)
#----------------------------------------------------------------------------
echo "Hello $USER."
tail -n 52 $1 | head -n 51
我对下一步该做什么以及如何执行该脚本感到困惑。我使用 chmod 755 更改了权限,使其成为可执行文件,但我不知道此过程中接下来会发生什么。
(编辑):我已经弄清楚如何运行我创建的脚本,并且它使用以下命令按预期工作:
./extractdata/文件路径/file.csv
我现在陷入了如何获取月份目录中所有 .csv 文件的这一部分,并将它们放入名为 polls.csv 的文件中
(编辑):将 > polls.csv 添加到我的 extractdata 脚本中会将我的 head 和 tail 命令按预期保存到我的 polls.csv 中。现在我只需要弄清楚如何对 filepath 目录中的所有 .csv 文件执行此命令。
(更新):有什么方法可以在脚本中添加一个循环来处理将所有 .csv 文件提取的数据添加到 polls.csv 文件中的问题吗?
答案1
find . -iname '*.csv' | xargs -I {} tail -n 52 "{}" \| head -n 51 > polls.csv
尽管您应该使用 grep 而不是 head 和 tail。
答案2
您可以使用 find 的 -exec 功能来执行此操作,而无需使用脚本:
for i in $(ls months)
do
find . -name \*.csv -exec tail -n 52 {} | head -n 51 >> /absolutePath/polls.csv \;
done