Linux 如何在awk中使用bash命令
这是我的问题 我有一个文件1,其中有一些数据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 如果有更简单的方法,请不要
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