将文件加载到数组中,使用数组中的数据处理第二个文件

将文件加载到数组中,使用数组中的数据处理第二个文件

我在 Windows 7 上的 cygwin 环境中。我正在使用以下命令运行现有的 awkscript:

awk -f awkscript datafile.txt

awkscript 读取并处理 datafile.txt 中的数据,datafile.txt 中的字段之一是代码。

例子: f1|f2|f3|f4

...其中 f2 值是一个代码

我可以将 awkscript 中的代码及其描述硬编码到函数中的数组中,并在处理时打印出描述,但这对我来说是一种草率的方式。

带有代码和描述的数据示例如下:

111|Description of 111
222|Description of 222
333|Description of 333

...其中 111 是代码,我想打印出“111 的说明”我将调用此文件code-descr.txt

由于上面包含代码和描述的文件永远不会改变,我想运行 awkscript 并将其读取 code-descr.txt 到数组中。

如何将其添加到命令行:awk -f awkscript datafile.txt?如果我不需要向命令行添加任何内容,那么在运行时如何始终将 code-descr.txt 读入数组:awk -f awkscript datafile.txt

答案1

尝试

awk 'BEGIN { FS="|"} 
     FILENAME=="code-desc.txt" { descr[$1]=$2 ; next }
      { for(i=1;i<=FS;i++) printf "%s|",descr[$i] ; printf "\n" ;} '  code-desc.txt datafile.txt

在哪里

  • BEGIN { FS="|"} 告诉 awk 使用 |作为分隔符
  • FILENAME=="code-desc.txt" { descr[$1]=$2 ; next }解析code-desc.txt时,构建数组。
  • 对于所有其他行,打印字段的描述。

请注意:

  • 尊重文件的顺序(datafile.txt 之前的 code-desc.txt),
  • 单引号之间的代码可以放入 awk 脚本中,
  • 如果您的代码错误,这将不起作用。

相关内容