【问题标题】:print records using awk with array使用带有数组的 awk 打印记录
【发布时间】:2014-10-04 16:54:40
【问题描述】:
/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

【问题讨论】:

    标签: arrays bash awk


    【解决方案1】:

    就这么简单:

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

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

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

    但是请注意,这仅在您的路径和文件名中没有任何空格时才有效。

    【讨论】:

    • 我应该如何通过简单地排除所有/科学分数来打印如下:100 comp 分数:96 分数:100
    • @user3834663,如果这是新要求,请更新您的问题。
    • @user3834663 使用sub 删除它。 awk '$3 &gt; 95 {sub(/.*\//,"",$1); print $1, $2, $3}'split 并选择最后一个条目 awk '$3 &gt; 95 {n=split($1,a,/\//); print a[n], $2, $3}'
    【解决方案2】:
    $ awk -F'[/ ]+' '$8>95{print $6, $7, $8}' file
    science score: 100
    comp score: 96
    mat score: 100
    

    【讨论】:

    • 这将取决于 / 的数量,这将与样本一起使用,但如果 / 的数量可以是可变的,则不是。另一种方法是使用 -F'.*/| +' 并使用 $2、$3 和 $4。
    • 这取决于/ 是否可以出现在某些行的其他位置。我们所要做的就是发布的示例输入,并希望 OP 向我们展示了行格式不同的东西。他在每一行的第一个字段中显示了相同数量的斜线,所以我希望情况总是如此,如果不是这样,OP 总是可以告诉我们并用更具代表性的输入更新他们的问题。
    【解决方案3】:

    试试这个:

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

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

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

    【讨论】:

    • awk 的工作方式 (condition { action }) 意味着 if 在这里完全是多余的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 1970-01-01
    • 2019-06-13
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多