在shell脚本中使用带有awk的变量时出现的问题

时间:2015-12-15 06:03:12

标签: shell

我试图以自动方式编写简单的shell脚本。 解析我的字符串并将解析后的字符串连接到原始文件上下文中。

但是,当我使用awk命令执行此操作时,虽然我发现我查找的字符串已经解析得很好但它没有用。

以下是我的代码。

for file in ./*.txt
do
    fileName="$( string $file | rev | cut -d. -f2 | rev)"
    echo $fileName
    awk '{print($2"\t"$3"\t"$4"\t""0""\t""0""\t"$5"\t"$6"\t"$7"\t"$8"\t"$fileName)}' $file
done

你能提供一些建议吗?

1 个答案:

答案 0 :(得分:0)

很确定你只是想引用shell变量$ filename。一种选择是更改报价样式(以单引号开头,以双引号结束)并使用:

awk '{print $2, $3, $4, "0", "0", $5, $6, $7, $8, "'"$fileName\" }" OFS=\\t $file

你需要在$ fileName周围加上双引号,以便shell将其插入为变量。你可以在整个事情上使用双引号,也可以写awk "{print \$2, ...。有很多方法可以进行必要的引用,但是将shell变量作为awk变量传递更具可读性:

awk '{print $2, $3, $4, "0", "0", $5, $6, $7, $8, f }' OFS=\\t f="$fileName" $file