制作 awk 并获取列

制作 awk 并获取列

我有下一个问题:

查看结构信息:

0   PATRAC_1  False   Normal    Normal  3     Not configure

我们有七列,七个值,所以,我需要使用 awk 获取这些值,在开始时我使用空格之类的分隔符,所以,如果我输入print $1,我得到:“0”,如果我输入print $2,我得到“PATRAC_1” , ETC。

但是当我尝试获取第 7 列时,我只得到:“Not”,因为“not”和“configure”之间有空格

那么,我能做些什么来解决它呢?

答案1

如果您的数据位于固定列,您可以要求 awk 在这些列上进行拆分列宽通过设置FIELDWIDTHS。例如:

awk '
 BEGIN{ FIELDWIDTHS="4 10 8 10 8 6 99" }
 { printf "1=%s 2=%s 7=%s\n", $1, $2, $7 }
'

给出

1=0    2=PATRAC_1   7=Not configure     

答案2

默认情况下,awk 将任何空白序列视为列分隔符。它无法猜测您希望第七列跨越直到行尾(包括嵌入的空格),您需要告诉它。

由于列之间的空白数量不同,因此请保留基于空白的列定义。但不要使用最后一列,而是$7使用该行的文本减去前六列。

awk '{
    last_column = $0;
    sub(/^[[:blank:]]*([^[:blank:]]+[[:blank:]]+){6}/, "", last_column);
    print last_column;
}'

如果您有不支持字符类的旧版本 awk,请使用[ \t]代替[[:blank:]]。如果您的 awk 旧版本不支持正则表达式中的大括号,请创建该正则表达式的 6 个副本。

相关内容