首页 > 解决方案 > 在 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

谁能指出错误。#我是新来的#

标签: unixawk

解决方案


您的问题下的评论中解释了您的代码问题(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

推荐阅读