unix - 在 awk 命令中调用 for 循环时出错
问题描述
该片段如下所示:
echo -n "Filename: "
read filename
echo -n "Data Fields? "
read -a ar
awk -F '[[:space:]][[:space:]]+' 'BEGIN{OFS = "--"} {for val in "${ar[@]}" printf $val }' $filename
ar 是我正在读取的数组,文件名也是我正在读取的文件的名称。
该文件如下所示:
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Sanjay Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy DBA Technology $6,000
我想要做的是,接受用户的文件名,同时获取他想要显示的字段编号,然后扫描文件并相应地生成输出。
数组“ar”包含字段编号,如 1、2、3。
输入如下:
$ sh awk_prac.sh
Filename: employee.txt
Data Fields: 2 3
现在根据我上面给出的输入,输出应该如下所示:
Thomas Manager
Jason Developer
Sanjay Sysadmin
Nisha Manager
Randy DBA
但是每次我运行代码时,它都会在 for 之后显示指向“val”下的语法错误。
awk: cmd. line:1: BEGIN{OFS = "--"} {for val in "${ar[@]}" printf $val }
awk: cmd. line:1: ^ syntax error
谁能指出错误。#我是新来的#
解决方案
您的问题下的评论中解释了您的代码问题(awk 不是 shell),以下是解决方法:
$ cat tst.sh
echo -n "Filename: "
read filename
echo -n "Data Fields? "
read fields
awk -v fields="$fields" 'BEGIN{n=split(fields,f)} {for (i=1; i<=n; i++) printf "%s%s", $(f[i]), (i<n?OFS:ORS)}' "$filename"
$ ./tst.sh
Filename: file
Data Fields? 2 3
Thomas Manager
Jason Developer
Sanjay Sysadmin
Nisha Manager
Randy DBA
推荐阅读
- python - Python烧瓶应用程序抛出NoneType object is not subscriptable错误
- python - 如何使用networkx删除子图的最后一条边
- powerbi - Power Bi 不可理解的 Dax 公式
- jasmine - 错误:超时 - 异步函数未在 undefinedms 内完成
- java - 如何通过jamod读取控制器的输入状态?
- bloomberg - 勾选数据彭博
- python - 我不能 Conda 在 continuumio/anaconda3 Docker 容器中安装 Tesseract
- git - 如何在两个不同的分支树之间共享新的 git 分支?
- java - IntelliJ - IntelliJ 运行配置忽略 maven.config 和 jvm.config 文件
- visual-studio - 禁用警告 MSB8012