我如何在 awk 中使用 cut 和 sed?

How can i use cut and sed in awk?

首先 我是新来的,我想知道如何在 awk 中使用 cutsed任何编辑我的测试数据以将该数据保存到数组的方法

这是我的示例数据:

isdat    pts/0        10.80.24.3       Fri Sep 20 10:20:30 2019 - Fri Sep 20 11:55:51 2019  (01:35)

通常我可以选择usage_time awk '{print }' 会是这样
输出:(01:35)

我会减少 cut -d ':' -f1 | sed -e 's/(/ /' 小时 这分钟 cut -d ':' -f2 | sed -e 's/)/ /'

但 cut 和 sed 不能在 awk 中使用 我该如何解决这个问题

你不使用它们。 Awk 完全有能力自行处理:

$ awk '
~/^pts/ {                     # the grep part
    split(,a,/:/)            # split  by :
    for(i in a)                 # process all parts (2)
        gsub(/[()]/,"",a[i])    # remove parentheses
    print a[1],a[2]             # output both parts
}' file

输出:

01 35

James 给你一个很好的回答。使用最后一个字段(例如 $NF)的另一个细微变化可以是:

awk '{sub(/:/," ",$NF); print substr($NF,2,length($NF)-2)}' file

您只需将 ':' 替换为 ' ',然后取 (..).

之间的子字符串

结果

将您的输入通过管道传递给上面的表达式(并删除 file)会导致:

01 35

awk.

剥猫的方法总是不止一种

根据评论,如果您只想将输出限制为第二个字段以 pts 开头,那么您可以这样做:

awk '~/^pts/{sub(/:/," ",$NF); print substr($NF,2,length($NF)-2)}' file

没有魔法。