проблемы со срезом (unix) - PullRequest
0 голосов
/ 02 июня 2010

У меня странная проблема с cut Я написал сценарий, там у меня есть строка:

... | cut -d" " -f3,4 >! out

cut получает эти данные (я проверял это с помощью echo)

   James             James              033333333 0              0.00

но я получаю пустые строки в out, кто-нибудь может объяснить почему?

Ответы [ 4 ]

1 голос
/ 02 июня 2010

Если вам нужны поля из текстового файла, awk почти всегда является ответом:

... | awk '{print $3" "$4}'

Например:

$ echo 'James     James      033333333 0              0.00' | cut -d" " -f3,4

$ echo 'James     James      033333333 0              0.00' | awk '{print $3" "$4}'
033333333 0
1 голос
/ 02 июня 2010

Вам нужно сжать последовательности пробелов, чтобы каждая строка пробелов заменялась одним пробелом. Параметр -s (squeeze) команды tr идеально подходит для этого:

$ ... | tr -s " " | cut -d" " -f3,4 >! out
0 голосов
/ 02 июня 2010
... | grep -o "[^ ]*"

будет извлекать поля, каждое на отдельной строке. Тогда вы могли бы возглавить их. Не уверен насчет того, чтобы снова поставить их на одну линию.

0 голосов
/ 02 июня 2010

Cut не видит несколько пробелов как один пробел, поэтому он соответствует "пустоте" между пробелами.

Получаете ли вы пустые строки, когда пропускаете >! out часть?То есть, вы нацеливаетесь на правильные поля?

Если ваша строка ввода использует фиксированный интервал, вы можете использовать cut -c 4-10,15-20 | tr -d ' ' для извлечения групп символов 4-10 и 15-20 и удаления пробелов из них ..

...