2

awkを使用してdbテーブル(以下のサンプルを参照)からいくつかの列を選択的に表示しようとしています。すべてのフィールドにデータが入力されているわけではありませんが、それを表すために空白のフィールドを返す必要があります。

--------- -------------------------- ------------ ------
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

gawkFIELDWIDTHS
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 に答える