创建并执行脚本

创建并执行脚本

给定任务:使用 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

相关内容