首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于削减-f1-3,5在awk

相当于削减-f1-3,5在awk
EN

Stack Overflow用户
提问于 2022-09-28 18:04:25
回答 2查看 48关注 0票数 0

我要字段1,2,3,5

我用刀子做:

代码语言:javascript
复制
cut -f1-3,5

然而,对于awk,我会这样做:

代码语言:javascript
复制
awk '{for (i=0;i<=5;i++) {if (i!=4) {print $i}} }'

但我想让它更简洁。此外,在其他情况下,我可以有更多的不同距离的字段。awk '{for (i in 1 2 3 5) {print $i}}'不工作。我该怎么做?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-28 20:55:54

这做了cut所做的事情,而且做得更多:

代码语言:javascript
复制
$ echo 'a b c d e f g' |
awk -v ranges='1-3,5' '
    BEGIN {
        split(ranges,r,/,/)
        for ( i=1; i in r; i++ ) {
            n = split(r[i],range,/-/)
            for ( j=range[1]; j<=range[n]; j++ ) {
                f[++onf] = j
            }
        }
    }
    {
        for ( i=1; i<=onf; i++ ) {
            printf "%s%s", $(f[i]), (i<onf ? OFS : ORS)
        }
    }
'
a b c e

上述假设假设,如果您多次指定相同的字段号,那么需要多次打印该字段,并且希望按指定的顺序打印字段,以便例如重新排列顺序和/或重复字段,例如:

代码语言:javascript
复制
$ echo 'a b c d e f g' |
awk -v ranges='6,1-3,5,2,1' '
    BEGIN {
        split(ranges,r,/,/)
        for ( i=1; i in r; i++ ) {
            n = split(r[i],range,/-/)
            for ( j=range[1]; j<=range[n]; j++ ) {
                f[++onf] = j
            }
        }
    }
    {
        for ( i=1; i<=onf; i++ ) {
            printf "%s%s", $(f[i]), (i<onf ? OFS : ORS)
        }
    }
'
f a b c e b a
票数 1
EN

Stack Overflow用户

发布于 2022-09-28 18:44:23

对于按位置、数量和字段范围等进行字段选择的工作,cut做得更好。如果您真的想在awk中模仿这种行为,前提是您还需要在awk中完成其他任务,那么您可以考虑使用以下代码:

代码语言:javascript
复制
cat fcut.awk

BEGIN {
   n = split(f, a, /,/)
   for (i=1; i<=n; ++i) {
      if (split(a[i], b, /-/) == 2) {
         for (j=b[1]; j<=b[2]; ++j)
            fld[j]
      }
      else
         fld[a[i]]
   }
}
{
   for (i=1; i<=NF; ++i) {
      if (i in fld)
         s = (st++ ? s OFS : "") $i
   }
   print s
   s = st = ""
}

现在将其运行为:

代码语言:javascript
复制
awk -v f='1-3,5' -f fcut.awk file
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73886011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档