Ошибка при вызове цикла внутри команды awk - PullRequest
0 голосов
/ 31 августа 2018

Фрагмент выглядит следующим образом:

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 

Но каждый раз, когда я запускаю код, он показывает синтаксическую ошибку, указывающую под "val" после for.

awk: cmd. line:1: BEGIN{OFS = "--"} {for val in "${ar[@]}" printf $val }
awk: cmd. line:1:                        ^ syntax error

Может кто-нибудь указать на ошибку. # i_am_new_to_this #

1 Ответ

0 голосов
/ 31 августа 2018

Проблема с вашим кодом объясняется в комментариях к вашему вопросу (awk не является оболочкой), вот как ее решить:

$ 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...