使用AWK

时间:2016-06-19 16:26:14

标签: bash shell awk gawk

我正在尝试将简单的awk脚本应用于数据集文件。 该文件有150列,我只需要20到30之间的列。

下面是我用来获取20到30之间字段的记录的脚本。

BEGIN{}
{
for(f=20;f<=30;f++){
    print $f;
    }
}

我不知道为什么我得到下一行中10个字段的每个值。

即,

样本数据集

1 2 3 4 5 6 7
2 2 3 4 5 6 7 
3 3 3 4 5 6 7
4 4 4 4 5 6 7
5 5 5 5 5 6 7
6 6 6 6 6 6 7
7 7 7 7 7 7 7

I get output as 
1
2
3
4
5
6
7
2
2
3
4
5
6
7
...so on

2 个答案:

答案 0 :(得分:2)

解决方案

BEGIN{FS=" ";}
{
for(f=20;f<=30;f++){
    printf("%s ",$f);
    }print "";
}

答案 1 :(得分:2)

以下是另一种做同样的方法

awk -v f=20 -v t=30 '{for(i=f;i<=t;i++) \
                     printf("%s%s",$i,(i==t)?"\n":OFS)}' file

备注

  1. ft分别是起始列和结束列。
  2. 我们使用三元运算符来控制所需列之间的字段分隔符。
  3. 修改

    如果你需要20到30列和最后一栏,下面就足够了:

    awk -v f=20 -v t=30 '{for(i=f;i<=t;i++) \
                             printf("%s%s",$i,(i==t)?OFS""$NF"\n":OFS)}' file