2

我正在尝试使用 awk 有选择地显示数据库表中的几列(请参见下面的示例)。虽然并非所有字段都已填充,但我仍然需要返回一个空白字段来表示它。

--------- -------------------------- ------------ ------
000       0000000000198012           702          29
000       0000000000198013                        29
000                                  702          29
000       0000000000198015           702          03
055       0000000000000001           702          

这就是我正在使用的:

select * from db| awk '{print $1,$3,$4}'

但在有空白字段的行中,awk 会跳过这些字段并显示下一个填充字段的结果。如何准确显示结果?

-谢谢!

4

2 回答 2

3

gawk有 FIELDWIDTHS
http://www.gnu.org/software/gawk/manual/html_node/Constant-Size.html
用法:
command | awk -f foo.awk

foo.awk

NR==1 {
    for (i=1; i<=NF; i++) {
      FIELDWIDTHS = FIELDWIDTHS " " length($(i))+1
    }
}

NR>1 {
    print $1, $3, $4
}
于 2012-07-27T18:53:49.030 回答
2

如果列具有一致/静态宽度,并且间距是用 ' ' 字符而不是制表符处理的(意味着每一行的长度相同,无论缺少字段),您可以使用cut适当的字段开始/停止位置列表.

于 2012-07-27T19:01:07.153 回答