Arrays 使用带数组的awk打印记录

Arrays 使用带数组的awk打印记录,arrays,bash,awk,Arrays,Bash,Awk,我在一个名为“input.txt”的文件中有上述详细信息,如果得分大于95,我想打印$1。在这种情况下,我应该得到以下输出 /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

我在一个名为“input.txt”的文件中有上述详细信息,如果得分大于95,我想打印$1。在这种情况下,我应该得到以下输出

/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
有人能帮我编码吗。我正在尝试将awk与数组一起使用。到目前为止,我已经完成了这项工作,但尚未完成

science score: 100
comp score: 96
mat score: 100
declare-A列表
i=1
读行时;做
列表[$i]=$(echo$行| awk'{print$3}')
((i++);
完成
就这么简单:

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
awk
默认情况下按空格分隔行。第三个字段是实际分数,因此在这里检查大于95的值。要获得所述的输出,必须打印前三个字段,而不仅仅是第一个字段(仅为路径)

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

但是请注意,这仅在路径名和文件名中没有空格的情况下有效。

尝试以下方法:

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

我应该如何简单地排除所有/科学分数:100 comp分数:96分数,打印如下:100@user3834663,如果这是新要求,请更新您的问题。@user3834663使用
sub
将其删除<代码>awk'$3>95{sub(/.\/,“”,$1);打印$1、$2、$3}或
拆分它,然后选择最后一个条目
awk'$3>95{n=split($1,a,/\/);打印[n],$2,$3}
awk的工作方式(
条件{action}
)意味着
如果
在这里是完全冗余的。这取决于
/code>的数量,这将适用于样本,但如果/的数量是可变的,则不适用。另一种选择是使用
-F'.*/|+'
和$2、$3和$4。这取决于
/
是否可以出现在某些行的其他位置。我们所要做的就是发布示例输入,希望OP已经向我们展示了行格式的变化。他在每行的第一个字段中都显示了相同数量的斜杠,所以我希望情况总是如此,如果不是这样,OP可以随时告诉我们,并用更具代表性的输入更新他们的问题。
awk '{if ($3 > 95) print $1, $2, $3;}' < input.txt
awk '{if ($3 > 95) print $1, $2, $3}' input.txt
$ awk -F'[/ ]+' '$8>95{print $6, $7, $8}' file
science score: 100
comp score: 96
mat score: 100