/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
答案 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