使用带阵列的awk打印记录

时间:2014-10-03 15:31:35

标签: arrays bash awk

/stu/class/sub/med/science score: 100 name: A status: Pass Roll: 12
/stu/class/sub/med/hist  score: 75 name: B status: Pass Roll: 13
/stu/class/sub/med/comp score: 96 name: C status: Pass Roll: 14
/stu/class/sub/med/geo score: 40 name: D status: Fail Roll:15
/stu/class/sub/med/mat score: 100 name: D status: Pass Roll:16

我在文件中有上述详细说明" input.txt"如果得分大于95,我想打印$ 1.在这种情况下,我应该得到以下输出。

science score: 100
comp score: 96
mat score: 100

有人可以帮我编码吗。我试图使用awk与数组。到目前为止,我已经做到了这一点,但还没有完成。

declare -A list
i=1
while read line; do
list[$i]=$(echo $line | awk '{print $3}')
((i++));
done < input.txt
for i in "${list[@]}"; do
echo "$i";
if ...
done

3 个答案:

答案 0 :(得分:2)

就这么简单:

awk '$3 > 95 {sub(/.*\//,"",$1); print $1, $2, $3}' test.txt

awk默认用空格分隔行。第三个字段是实际分数,因此您可以检查大于95的值。要获得您所述的输出,您必须打印前三个字段,而不仅仅是第一个字段(仅限路径)

更新:感谢@jaypal关于如何删除路径的评论。

但请注意,这仅适用于路径和文件名中没有空格的情况。

答案 1 :(得分:0)

试试这个:

awk '{if ($3 > 95) print $1, $2, $3;}' < input.txt

重定向是可选的,因此,以下内容也可以。

awk '{if ($3 > 95) print $1, $2, $3}' input.txt

答案 2 :(得分:0)

$ awk -F'[/ ]+' '$8>95{print $6, $7, $8}' file
science score: 100
comp score: 96
mat score: 100