Linux 如何在awk中使用bash命令

Linux 如何在awk中使用bash命令,linux,bash,awk,Linux,Bash,Awk,这是我的问题 我有一个文件1,其中有一些数据 Var1.1 Var1.2 Var1.3 Var2.1 Var2.2 Var2.3 Var3.1 Var3.2 Var3.3 我有一个文件2,我想编辑感谢上述数据 文件2(1) 文件2(2) 我的第一个解决方案是使用AWK,但我不知道在其中包含bash命令。AWK应该制作如下内容: 在文件2中搜索模式2 当awk得到它时,awk调用一个脚本,该脚本从文件1返回所需的值 然后awk可以编辑文件2 如果有更简单的方法,请不要

这是我的问题

我有一个文件1,其中有一些数据

Var1.1   Var1.2   Var1.3
Var2.1   Var2.2   Var2.3
Var3.1   Var3.2   Var3.3
我有一个文件2,我想编辑感谢上述数据

文件2(1)

文件2(2)

我的第一个解决方案是使用AWK,但我不知道在其中包含bash命令。AWK应该制作如下内容:

  • 在文件2中搜索模式2
  • 当awk得到它时,awk调用一个脚本,该脚本从文件1返回所需的值
  • 然后awk可以编辑文件2
如果有更简单的方法,请不要犹豫向我解释其他的可能性


谢谢大家!

这是我如何从awk内部运行外部命令以对字符串进行base64解码:

cmd = "/usr/bin/base64 -i -d <<< " $2 " 2>/dev/null"
while ( ( cmd | getline result ) > 0 ) { }
close(cmd)
split(result, a, "[:=,]")
name=a[2]

cmd=“/usr/bin/base64-i-d不需要运行外部脚本来完成您想要的任务。它完全可以在一个短的AWK脚本内完成

awk 'FNR == NR {arr[$1] = $2 " " $3; next} {print; for (lookup in arr) {if ($0 ~ lookup) {split(arr[lookup], a); print "Here I want to add " a[1] " and " a[2]}}}' File1 File2
说明:

  • FNR==NR{arr[$1]=$2”“$3;next}
    -循环遍历第一个文件,并将所有值保存在由第一列索引的数组中。记录编号等于第一个文件的文件记录编号
  • 打印
    -打印每个输入行
  • for(arr中的lookup){if($0~lookup){
    -循环遍历每个数组索引,查看输入行是否匹配
  • split(arr[lookup],a)
    -将存储在匹配索引中的值拆分为临时数组
  • print“我想在这里添加“a[1]”和“a[2]”
    -使用拆分后的两个值打印一些文本

不清楚您想要什么,您需要提供输入和预期输出的明确示例。您需要比我已经给出的更多的什么?我不认为“叠瓦”是指您认为它的意思。我会使用“包含”或“合并”“。我尝试了这个方法,我告诉你,但这似乎是我正在搜索的!谢谢!请回答问题:“如何在awk中使用bash命令”@NoémienKocher:awk有
system()
函数,因此你可以做一个例子,
awk'BEGIN{system(“echo$bash\u版本”)}
。您还可以通过管道向Bash发送命令:
awk'BEGIN{print“echo$Bash\u VERSION”|“/bin/Bash”;close(/bin/Bash”)}
。还可以使用
getline
捕获命令的输出:
awk'BEGIN{cmd echo$Bash\u VERSION”;而((cmd | getline result)>0){print result};close(cmd)}“
cmd = "/usr/bin/base64 -i -d <<< " $2 " 2>/dev/null"
while ( ( cmd | getline result ) > 0 ) { }
close(cmd)
split(result, a, "[:=,]")
name=a[2]
awk 'FNR == NR {arr[$1] = $2 " " $3; next} {print; for (lookup in arr) {if ($0 ~ lookup) {split(arr[lookup], a); print "Here I want to add " a[1] " and " a[2]}}}' File1 File2