Проблема с awk и (возможно) нулевыми символами - PullRequest
0 голосов
/ 17 января 2019

У меня есть этот файл, который "может быть" двоичным файлом:

    DATA FIELDINFO Cloud_Mask_QA {{{
  rank: 2
  type: 20
  dims: Cell_Along_Swath_1km 2030, Cell_Across_Swath_1km 1354, 
  data: ... (2748620)
    (0,0) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,16) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,32) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,48) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,64) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,80) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,96) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,112) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,128) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,144) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,160) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,176) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@
    (0,192) ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@, ^@

Если я использую sed -n "l" file, чтобы увидеть «непечатные символы», я получаю:

    DATA FIELDINFO Cloud_Mask_QA {{{$
  rank: 2$
  type: 20$
  dims: Cell_Along_Swath_1km 2030, Cell_Across_Swath_1km 1354, $
  data: ... (2748620)$
    (0,0) \000, \000, \000, \000, \000, \000, \000, \000, \000, \
   \000, \000, \000, \000, \000, \000, \000$
    (0,16) \000, \000, \000, \000, \000, \000, \000, \000, \000, \
   \000, \000, \000, \000, \000, \000, \000$
    (0,32) \000, \000, \000, \000, \000, \000, \000, \000, \000, \
   \000, \000, \000, \000, \000, \000, \000$
    (0,48) \000, \000, \000, \000, \000, \000, \000, \000, \000, \
    \000, \000, \000, \000, \000, \000, \000$
    (0,64) \000, \000, \000, \000, \000, \000, \000, \000, \000, \
    \000, \000, \000, \000, \000, \000, \000$
    (0,80) \000, \000, \000, \000, \000, \000, \000, \000, \000, \
    \000, \000, \000, \000, \000, \000, \000$
    (0,96) \000, \000, \000, \000, \000, \000, \000, \000, \000, \
    \000, \000, \000, \000, \000, \000, \000$
    (0,112) \000, \000, \000, \000, \000, \000, \000, \000, \000,\
    \000, \000, \000, \000, \000, \000, \000$
    (0,128) \000, \000, \000, \000, \000, \000, \000, \000, \000,\
    \000, \000, \000, \000, \000, \000, \000$
    (0,144) \000, \000, \000, \000, \000, \000, \000, \000, \000,\
    \000, \000, \000, \000, \000, \000, \000$
    (0,160) \000, \000, \000, \000, \000, \000, \000, \000, \000,\
    \000, \000, \000, \000, \000, \000, \000$
    (0,176) \000, \000, \000, \000, \000, \000, \000, \000, \000,\
    \000, \000, \000, \000, \000, \000, \000$
    (0,192) \000, \000, \000, \000, \000, \000, \000, \000, \000,\
    \000, \000, \000, \000, \000, \000, \000$

Я пытаюсь использовать awk, но если я сделаю awk '{print $0}' file, я получу:

    DATA FIELDINFO Cloud_Mask_QA {{{
  rank: 2
  type: 20
  dims: Cell_Along_Swath_1km 2030, Cell_Across_Swath_1km 1354, 
  data: ... (2748620)
    (0,0) 

Похоже, что awk прекращает обработку файла с первого найденного символа «^ @» или «\ 000».

Как мне этого избежать?

Примечание: кажется, мой awk mawk

1 Ответ

0 голосов
/ 23 января 2019

gawk, кажется, решает проблему, а не mawk. awk обычно связан с одним из этих двух, поэтому единственное, что нужно сделать, это установить gawk и использовать его вместо awk.

...