我在 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 脚本中,
- 如果您的代码错误,这将不起作用。