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

new*_*usr 3 awk text-processing

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

awk -f awkscript datafile.txt
Run Code Online (Sandbox Code Playgroud)

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

例子: f1|f2|f3|f4

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

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

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

111|Description of 111
222|Description of 222
333|Description of 333
Run Code Online (Sandbox Code Playgroud)

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

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

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

Arc*_*mar 5

尝试

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
Run Code Online (Sandbox Code Playgroud)

在哪里

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

请注意:

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