2

这是我的问题

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

Var1.1   Var1.2   Var1.3
Var2.1   Var2.2   Var2.3
Var3.1   Var3.2   Var3.3

由于上述数据,我有一个文件 2 我想编辑

文件 2 (1)

***pattern with Var2.1***
some text...

文件2(2)

***pattern with Var2.1***
Here I want to add Var2.2 and Var2.3
some text

我的第一个解决方案是使用 AWK,但我不知道在其中包含 bash 命令。AWK 应该是这样的:

  • 在 File2 中搜索模式
  • 当 awk 得到它时,awk 调用一个脚本,该脚本从 File1 返回所需的值。
  • 然后awk可以编辑File2

如果有更简单的可能性,请毫不犹豫地向我解释其他可能性!

谢谢 !

4

2 回答 2

5

这就是我从 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]

或许你能从中得到一些启发……

于 2012-08-31T09:22:30.217 回答
1

无需运行外部脚本来完成您想要的。它可以完全在一个简短的 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}- 遍历第一个文件并将所有值保存在由第一列索引的数组中。记录号等于第一个文件的文件记录号。
  • print- 打印每个输入行。
  • for (lookup in arr) {if ($0 ~ lookup) {- 循环遍历每个数组索引并查看输入行是否匹配。
  • split(arr[lookup], a)- 将存储在匹配索引处的值拆分为临时数组。
  • print "Here I want to add " a[1] " and " a[2]- 使用拆分产生的两个值打印一些文本。
于 2012-08-31T13:11:30.737 回答