【发布时间】:2014-07-17 11:39:31
【问题描述】:
我正在 awk 中处理一个 csv 文件。在执行脚本的过程中,我需要退出 awk 一段时间,然后根据 csv 文件中处理的信息 awk 在 bash shell 中进行一些 ImageMagick 处理。我正在尝试在 shell 中进行此图像处理,因为我遍历了指定目录中的所有 jpg 文件。我的问题是双重的:
- 如何将变量从 awk 传递到 bash 以便我可以做到这一点? (在下面的代码中是
$imageDirectory和$productRef) - 我试图避免使用大量
system(someImageMagicCommand)类型的代码,因为看起来我正试图使用 awk 来做一些它不适合做的事情。有更好的方法吗?
这是说明我想要实现的目标的伪代码示例:
#blah blah blah awk code
#leave awk interpreter, go into bash
'
resizesize="200x200";
#concatenate with *.jpg suffix for listing all the jpg files in the imageDirectory
imageDirectoryWithSuffix="$imageDirectory/*.jpg";
for i in `ls $imageDirectoryWithSuffix`
do
#imageMagick converts large images to thumbnails
convert $i $resizeSize -otherFlagsEtc assets/$productRef/thumbs/$i
done
'#back into awk, more csv processing now...
澄清背景:我有一个包含产品信息和相关文件路径的 csv 文件(每行 1 个产品)。我正在尝试自动创建有关产品的网页。其中一部分涉及调整图像目录的大小,其位置在 csv 文件中作为字段给出。因此,在脚本的中途,我试图离开 awk 解释器,调用 ImageMagick 来调整大小,然后返回到 awk 解释器在 csv 文件中的同一记录处 并继续输出 HTML 文件。
在我进入 ImageMagick 部分之前大约有 100 行(长)脚本代码,之后还有 100 行,所以根据@Bushmills 的回答,我认为最好的办法是在 bash 中编写我需要的 awk 变量一个小的临时文件,然后退出 awk 并从 bash 中读取临时文件。但是,我如何重新调用 awk 并让它从它停止的同一记录开始读取?还是我只需要留在 awk 并使用 system() 电话?将整个 bash for 循环包装在 awk system() 函数中似乎并不明智,但我想不出一种更优雅的方式来对整个文件目录调用 ImageMagick。
【问题讨论】:
-
您向我们展示了一些由于周围的东西而无法正常工作的中间部分 - 真的很难提供帮助。我认为,如果您退后一步,用更多代码告诉我们整体问题和您当前的方法,您可能会做得更好。
-
@MarkSetchell 我已经根据上下文更新了问题。
标签: bash awk imagemagick parameter-passing