我正在用awk处理一个csv文件。在脚本中,我需要退出awk一段时间,然后根据csv文件中处理的信息awk在bash shell中进行一些ImageMagick处理。我正在尝试在shell中执行此图像处理,因为我遍历指定目录中的所有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调整大小,然后返回到aws解释器 在csv文件中的相同记录 并继续输出HTML文件。
在我到达ImageMagick部分之前有大约100(长)行代码,之后又有100行,所以根据@Bushmills的回答,我认为最好的办法就是在bash中编写我需要的awk变量一个小的临时文件,然后退出awk并从bash中读取临时文件。但是,如何重新调用awk并让它开始在它停止的同一记录中阅读?或者我只需要留在awk并使用system()
电话?将整个bash for
循环包装在awk system()
函数中似乎不合理,但我想不出在整个文件目录上调用ImageMagick的更优雅方式。
答案 0 :(得分:1)
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