我正在awk中处理一个csv文件。在脚本执行期间,我需要退出awk一段时间,然后根据csv文件中处理的awk信息在bash shell中进行一些ImageMagick处理。我正在尝试在外壳中执行此图像处理,因为我遍历了指定目录中的所有jpg文件。我的问题是双重的:
$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调整大小,然后返回csv文件中同一记录的awk解释器,并继续输出HTML文件。
在我进入ImageMagick部分之前,大约有100行(长)脚本代码,而在此之后又有100行,因此基于@Bushmills的回答,我认为最好的方法是将bash中需要的awk变量写到一个小临时文件中。文件,然后退出awk并从bash中读取临时文件。但是,如何重新调用awk并使其从停止的同一条记录开始读取?还是我只需要呆在awk中并使用system()
电话?for
在awksystem()
函数中包装整个bash循环似乎并不明智,但我想不出一种在整个文件目录上调用ImageMagick的更优雅的方式。
Fifo可能是您进行下一步的好方法。基本想法是,您awk
在ImageMagick内容中创建一个隧道,然后将请求awk
通过该隧道传递到ImageMagick。
因此,您的主要脚本可以做到这一点:
#!/bin/bash
...
mkfifo tunnel
ImageMagickScript &
...
awk '{...
...
print directory size> "tunnel"
...
... } file
...
wait # for ImageMagick script that we started to finish
您的ImageMagick脚本可以做到这一点
#!/bin/bash
while read directory size
do
convert ... $directory $size ...
done < tunnel
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句