大家好,我在 Halls 目录中有一个名为 Halls Engines 的文件。
所以目录结构看起来像
大厅/大厅发动机
Halls Engines 文件包含以下信息:
布朗,约翰,24000
布朗,苏珊,26000史密斯,吉尔,24000
我正在尝试编写一个包含两个参数的脚本 - 系列名称和文件名,但效果不佳。
最终代码应打印出一个初始行,其中包含文件名和姓氏以及具有指定姓氏的所有人的名字和工资。
这是我到目前为止编写的代码:
cd Halls
for filename in $2
do
echo "Subsidiary=$2 Family Name=$1"
awk -F, '$1 ~/$1/{print $1 " has a salary of " $3}'
done
这就是我运行脚本的方式(保存为 ss1 ):
./ss1 Brown "Halls Engines"
这应该返回一些东西:
布朗的薪水为24000英镑
布朗的薪水为26000英镑
但是我没有通过echo语句输出。关于如何解决这个问题的任何建议?
答案 0 :(得分:3)
在awk
中,您需要定义一个变量并将其引用到bash变量。像这样的东西 -
#!/bin/bash
name="$1"
shift
for filename in "$@"
do
awk -v FS=',' -v gname="$name" '$1~gname{print $1 " has a salary of "$3}' "$filename"
done
[jaypal:~/Temp] cat data
Brown,John,24000
Brown,Susan,26000
Smith,Jill,24000
[jaypal:~/Temp] cat data1
Brown,Charlie,64000
Brown,Sam,46000
Smith,Jill,24000
[jaypal:~/Temp] ./s.awk Brown data data1
Brown has a salary of 24000
Brown has a salary of 26000
Brown has a salary of 64000
Brown has a salary of 46000
答案 1 :(得分:3)
或者你也可以使用一个班轮
grep $1 "Halls/""$2" | awk -F , '{print $1 " has a salary " $3}'
行动中:
shadyabhi@archlinux /tmp $ cat Halls/Halls\ Engines
Brown,John,24000
Brown,Susan,26000
Smith,Jill,24000
shadyabhi@archlinux /tmp $ ./ssl.sh Brown "Halls Engines"
Brown has a salary £24000
Brown has a salary £26000
shadyabhi@archlinux /tmp $
答案 2 :(得分:2)
这是一个错字,还是你把文件名作为awk的输入?
编辑好的,现在来自shell的$ 1与awk的$ 1不同。请参阅以下更改。
cd Halls
for filename in $2
do
echo "Subsidiary=$2 Family Name=$1"
awk -F, '$1 ~ /'"$1"'/{print $1 " has a salary of " $3}' $filename
# ---------------^^^^^^^------------------------------------^^^^^^^^^^^
done
我希望这会有所帮助。
答案 3 :(得分:2)
# Your awk line:
# awk -F, '$1 ~/$1/{print $1 " has a salary of " $3}'
# ^ ^- You want this one to be interpreted, but it's single-quoted.
# ^- Correctly not interpreted.
# Either escape the $s that awk should see:
awk -F, "\$1 ~/$1/{print \$1 " has a salary of " \$3}" "Halls/$2"
# Or change to double quotes for them.
awk -F, '$1 == "'"$1"'"{print $1 " has a salary of " $3}' "Halls/$2"
答案 4 :(得分:1)
试试这个,希望我的任务正确:
#!/bin/bash
while read line; do
echo "$1,$line" | awk -F, '{ if ($1 == $2) print $2 " has a salary of " $4 }'
done < $2
我用你的三个条目制作了一个文件“halls_e”并运行它:
~# ./halls.sh Brown "halls_e"
Brown has a salary of 24000
Brown has a salary of 26000
~# ./halls.sh Smith "halls_e"
Smith has a salary of 24000