Я хочу проанализировать эти столбцы в таблице psql, но как я могу обрабатывать пустые поля?

#postgresql #awk

#postgresql #авк #awk

Вопрос:

Я хочу проанализировать эти столбцы в таблице psql, но как я могу обрабатывать пустые поля? с помощью этой команды: » awk ‘{print $ 3;}’ text.txt » он игнорирует пробелы и записывает номер следующего столбца..

        StartTime           LastTime            SrcAddr            DstAddr  Sport  Dport  SrcPkts  DstPkts     SrcBytes     DstBytes 
   13:14:52.088291    13:14:52.088291       192.168.0.23      192.168.0.255 57621  57621         1        0           86            0
   13:14:54.936682    13:14:54.936682       192.168.0.23      192.168.0.255 17500  17500         1        0          243            0
   13:14:54.936479    13:14:54.936479       192.168.0.23                    17500  17500         1        0          243            0
   13:14:56.056179    13:14:56.056179                         192.168.0.163 17500  17500         1        0          208            0
   13:14:56.056370    13:14:56.056370      192.168.0.163      192.168.0.255 17500  17500         1        0          208            0
   13:15:00.027462    13:15:00.027462      192.168.0.170      192.168.0.255 17500  17500         1        0          146            0
   13:15:00.652690    13:15:00.652874                         192.168.0.166 443    57201         1        1          121           66
   13:15:04.636177    13:15:04.636177      192.168.0.163      192.168.0.255 57621  57621         1        0           86            0
   13:15:09.622847    13:15:09.622847      192.168.0.166                    38029  53            1        0           76            0
   13:15:13.138197    13:15:13.138197      192.168.0.158      192.168.0.255 57621  57621         1        0           86            0
   13:15:15.429763    13:15:15.429763      192.168.0.151      192.168.0.255 57621  57621         1        0           86            0
   13:15:19.793651    13:15:19.793651      192.168.0.163      192.168.0.255 138    138           1        0          280            0
   13:15:19.795815    13:15:19.795815       192.168.0.90      192.168.0.255 137    137           1        0           92            0
   13:15:20.342669    13:15:20.342669       192.168.0.23      192.168.0.255 137    137           1        0           92            0
   13:14:40.721537    13:14:42.016881      192.168.0.136      192.168.0.166 22     59301        11       14         1334         1404
   13:15:24.981466    13:15:24.981466       192.168.0.23    255.255.255.255 17500  17500         1        0          243            0
   13:15:24.981666    13:15:24.981666       192.168.0.23      192.168.0.255 17500  17500         1        0          243            0
   13:14:40.996353    13:14:41.996328                          192.168.0.22                      2        0          120            0
   13:14:41.203309    13:15:41.171881                                       66     66           31        0         1984            0
   13:15:26.116537    13:15:26.116537      192.168.0.163                    17500  17500         1        0          208            0
   13:15:26.116728    13:15:26.116728      192.168.0.163      192.168.0.255 17500  17500         1        0          208            0
   13:14:41.863153    13:15:41.852795                                       0      0            31        0         1860            0
   13:15:01.195960    13:15:03.192229                         192.168.0.234                      3        0          180            0
   13:15:04.636774    13:15:04.636774       192.168.0.91      192.168.0.163                      1        0           60            0
   13:15:10.398423    13:15:10.398423      192.168.0.110        192.168.0.1                      1        0           60            0
   13:15:40.800831    13:15:40.913802      192.168.0.152        192.168.0.1 49556  53            2        2          148          689
  

Комментарии:

1. Возможно ли, что вы можете создать или получить данные в другом формате, разделенные запятыми или табуляцией, например, что сделало бы явными отсутствующие поля?

2. Ваши данные разделены табуляцией или поля фиксированной ширины или что-то еще? Обновите свой вопрос, чтобы указать, как разделены поля.

Ответ №1:

Вы можете указать по позиции, где получать данные, обрезать их и распечатать с помощью awk

 awk '{a=substr($0,40,17);gsub(/ */,"",a);print a}' file
SrcAddr
192.168.0.23
192.168.0.23
192.168.0.23

192.168.0.163
192.168.0.170

192.168.0.163
192.168.0.166
192.168.0.158
192.168.0.151
192.168.0.163
192.168.0.90
192.168.0.23
192.168.0.136
192.168.0.23
192.168.0.23


192.168.0.163
192.168.0.163


192.168.0.91
192.168.0.110
192.168.0.152
  

Комментарии:

1. Именно то, что я собирался предложить.

Ответ №2:

ПОХОЖЕ, у вас поля фиксированной ширины, поэтому используйте GNU awk:

 $ cat file
abcd ef ghi klmno
1234 12      123

$ awk -v FIELDWIDTHS="4 1 2 1 3 1 5" '{print "<" $3 ">"}' file
<ef>
<12>

$ awk -v FIELDWIDTHS="4 1 2 1 3 1 5" '{print "<" $5 ">"}' file
<ghi>
<   >
  

и если вы хотите удалить начальные и конечные пробелы из каждого поля для вывода, просто добавьте gsub():

 $ awk -v FIELDWIDTHS="4 1 2 1 3 1 5" '{gsub(/^s |s $/,"",$5); print "<" $5 ">"}' file
<ghi>
<>

$ awk -v FIELDWIDTHS="4 1 2 1 3 1 5" '{print "<" $7 ">"}' file
<klmno>
< 123 >

$ awk -v FIELDWIDTHS="4 1 2 1 3 1 5" '{gsub(/^s |s $/,"",$7); print "<" $7 ">"}' file
<klmno>
<123>