我的问题是继续
我正在尝试将一系列命令集成到一个 shell 脚本中
解析欧洲标准以提取测试序列
将文本编码转换为utf8
使用上面帖子中提供给我的 awk 例程处理结果。
将内容保存在目标文件中
我暂时写了下面的脚本。我只能实现step 1
and step 4
,但不能实现step 2
nor step 3
。我想知道是否应该创建中间(临时)文件。我尝试将中间步骤的输出存储到变量中,但没有成功。任何帮助对于可能的错误以及执行此操作的最佳方法也会有帮助。
#!/bin/bash
# creating the Latex code for a test procedure
awkcommand= "/usr/bin/awk
'
$1 == "Group" {printf("\\section{%s %d}\n", $1, $2); next}
{
title = sep = ""
for (i=1; i<=NF; i++)
if ($i ~ /^[0-9][0-9][0-9]$/) {
printf("\\subsection{%s} \n\\TestDetails{%d}\n", title, $i)
break
}
else {
title = title sep $i
sep = FS
}
}
'
"
sourcefolder="/Users/yves/Desktop/Test-folder-parsing/"
sourcefile="NFEN3545-001.pdf"
destfile="Latex-code.tex"
destfolder=$sourcefolder
destinationfilepath=${destfolder}${destfile}
extractioncmd="/usr/local/bin/pdftotext -layout -f 54 -l 54"
modifier=" -"
#textencodingcmd="/usr/bin/iconv -f L1 -t UTF-8" # Needed but not used
${extractioncmd} ${sourcefolder}${sourcefile} ${modifier} > $destinationfilepath
exit 0
答案1
您可以将传递给的代码存储/usr/bin/awk
在一个变量和
/usr/bin/awk
一个单独的变量中,如下所示(未经测试):
awk=/usr/bin/awk
awkcommand='
$1 == "Group" {printf("\section{%s %d}\n", $1, $2); next}
{
title = sep = ""
for (i=1; i<=NF; i++)
if ($i ~ /^[0-9][0-9][0-9]$/) {
printf("\subsection{%s} \n\TestDetails{%d}\n", title, $i)
break
}
else {
title = title sep $i
sep = FS
}
}
'
用法:
$awk "$awkcommand"
请注意,我将双引号更改为单引号。双引号内的$i
被 shell 变量 的内容替换i
。在单引号内,它是一个文字$i
,这是awk
期望看到的。
另外,您没有转义字符串中的双引号,因此
awk
从未见过
$1 == "Group" {printf("\section{%s %d}\n", $1, $2); next}
相反,它看到了
<contents of shell $1> == Group {printf(\section{%s %d}\n, <contents of shell $1>, <contents of shell $2>); next}
如果$1
和$2
为空,awk
则看见
== Group {printf(\section{%s %d}\n, , ); next}
您确定需要存储命令位置吗?您通常可以依赖于awk
在用户路径中的目录中查找。如果您不使用 的完整路径awk
,则没有理由对 进行参数化awk
。