2016-11-15 3 views
0

Я пытаюсь разобрать вывод следующей командыПопытка обработать выходной файл с помощью AWK

hdfs dfs -count 

По большей части я могу получить то, что я хочу, однако, я имею вопрос с первой частью

1   23   1118275 /user/data/system/sys_1/... 
    1   23   1515762 /user/data/system/sys_2/... 
    1   23   1892459 /user/data/system/sys_3/... 

Я использую AWK для обработки ... например, ...

awk ' BEGIN { FS="[/]"; OFS="," } { print $1,$2,$3,$(NF-1),$0 } ' 

... но я получаю первый блок, как необработанный, например, ...

1   23   1118275 
    1   23   1515762 
    1   23   1892459 

Я попытался ...

{ FS="[ /]"; OFS="," } 

но с пространством, но это дает мне выход commmas, он не видит/

Итак, резюме, я могу parse via /, но только в точку, он, кажется, игнорирует блок-пробелы.

Если есть путаница, я извиняюсь, это довольно сложно объяснить, что происходит. В принципе, $ 1 является блоком, и я не могу обработать его правильно. Я попытался разобрать его как часть FS = "/", но это не работает вообще.

substr ($ 1, x, y) тоже не работает должным образом, он рассматривает обработку блока как нечто, что нельзя разделить. Я делаю это сейчас ...

awk ' BEGIN { FS="[/]" } { print substr($1,37) } ' 

и я изолировать размер файла ...

1118275 
1515762 
1892459 
1990075 
    882355 
2125763 
1841735 
2260994 
1082926 
13649144 

Но если я пытаюсь что-то вроде этого ...

awk ' BEGIN { FS="[/]" } { print substr($1,24,24) } ' 

Я получаю это ...

23   1118275 
23   1515762 
23   1892459 
23   1990075 
23    882355 
23   2125763 
23   1841735 

Надеюсь, это немного яснее, но это m а не быть.

+1

Что происходит с командой? Каковы ваши желаемые результаты? Это непонятно, и у меня нет окна Hadoop, чтобы запустить команду, чтобы увидеть, что она выплевывает. – JNevill

+0

Я не уверен, что я понимаю ваш вопрос, но похоже, что вы хотите сделать дополнительную обработку содержимого первого поля для каждой записи. Вы думали о том, чтобы полностью исключить параметр OFS, а затем манипулировать содержимым $ 1 перед выполнением команды печати для каждой строки? – Leslie

+0

команда будет похожа на hdfs dfs -count /user/data/system/*...it выплевывает каталог, разделы и размеры файлов, связанные с каждой записью ... счетчик похож на hdfs dfs -ls, кроме этого из перечисленных файлов я получаю резюме файлов в каталоге ... Я ищу, чтобы иметь выход из 1,23,1118275, т. е. разделенный запятой ... на данный момент все, что я получаю, составляет 1 23 1118275, что не разделены запятыми, даже если я пытался указать как FS = "/"... по крайней мере с FS ="/"Я получаю вывод, который является полупригодным ... когда я пытаюсь настроить FS на" "Я получаю пустой выход. – antimuon

ответ

2

Это быстрый и грязный ответ, но на основе вашего комментария, это близко к тому, что вы хотите?

BEGIN { FS="[/]"; OFS="," } { 
    z = split($1,aa," ") 
    print aa[1],aa[2],aa[3],$2,$3,$(NF-1),$0 
} 
+0

Спасибо за подсказку!Я сделал это awk 'BEGIN {FS = "[/]"; OFS = ","} {split ($ 1, a, ""); напечатайте [2], [3]} 'и удалось разбить блок $ 1 и получил это 23,1118275 и т. д. – antimuon

Смежные вопросы