string - 如何在 awk 表达式中使用变量

标签 string bash awk printf

我正在尝试执行此命令:

sed bla bla filename | awk '{printf "%s %s_entry_%.3f %.3f %.3f %.3f",$1,$3,$4,$5,$6,$7}'

但问题是,我希望 %.3f 部分是可变的。所以在一种情况下它可能是 %.3f 而在另一种情况下它可能是 %.3f %.3f %.3f。因此,为了清楚起见,我将在我的示例代码中使用静态代码。因此,如果我想要其中的 4 个 %.3f 并将它们放入变量 $values 中,如下所示:

values="%.3f %.3f %.3f %.3f"

那么我怎样才能把这个字符串放在 awk 表达式中,而不是让 awk 只把字面上的“${values}”放在那里。以下是我的非工作尝试:

sed bla bla filename | awk '{printf "%s %s_entry_${values}",$1,$3,$4,$5,$6,$7}'

最佳答案

你可以使用awk的-v选项从shell中传入变量

#!/bin/bash    
awk -v values="${values}" '{gsub("blah","replace");printf "%s %s_entry_"values ....}' file

gsub() 功能是用 sed 命令替换您拥有的内容。所以只需要一个 awk 命令就可以了。 sed 在这种情况下是多余的(以及大多数其他使用 awk 的情况)

关于string - 如何在 awk 表达式中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2599051/

相关文章:

bash - 获取 block 设备的文件系统十六进制 ID,如所示 "fdisk"

linux - 用于查找文件的 Bash 脚本

linux - 根据文件中的不同列排序和删除重复项

awk - 如何在 Awk 中使用单个正则表达式提取多个字符串

c - 如何使用 strtok_r 对包含空值的字符串进行标记

Java - 带计时器的用户输入线程

c++ - 在C中使用utf8字符串

bash - 尝试从 bash 中的字符串中检索前 5 个字符(仅数字和字母)

bash - awk 按空格分割行,其中每个字段都有空格

Python float - str - 浮点怪异