Разделить строку, используя строку в качестве разделителя в awk - PullRequest
6 голосов
/ 17 марта 2011

Система: Solaris Я пытаюсь разбить строку, используя разделитель в качестве другой строки

Например:


Основная строка: /as/asdasd/asdasd/root/asdqwe/asd/asssdd/

Я хочу разделить это на две части из "корневой" подстроки, так что

$1 = /as/asdasd/asdasd/

и

$2 = asdqwe/asd/asssdd/

Этокод, который я реализовал с использованием FS, но он не работает:

echo /as/asdasd/asdasd/root/asdqwe/asd/asssdd/ | awk '
BEGIN { FS = "root" } { print $2 }'

Ответы [ 2 ]

4 голосов
/ 17 марта 2011

Не нужно использовать awk, вы можете сделать это с вашей оболочкой POSIX следующим образом:

$ var="/as/asdasd/asdasd/root/asdqwe/asd/asssdd/"

$ echo ${var%/root/*}
/as/asdasd/asdasd

$ echo ${var#*/root/}
asdqwe/asd/asssdd/

Обновление

Если ваша версия Solaris awk не работает(вероятно, потому что FS должен быть символами, а не строками), затем попробуйте этот метод, используя split()

awk '{split($0,a,"/root/");$1=a[1] "/"; $2=a[2]; print $1,$2}'
4 голосов
/ 17 марта 2011

Это работает здесь, за исключением дополнительных / на передней панели, с которыми вы не справляетесь. Может быть, вы хотите "root/" в качестве разделителя? Также может быть необходимо использовать более новую awk; Solaris по-прежнему поставляет древний Unix V7 awk как /usr/bin/awk, POSIX-совместимый awk - /usr/bin/nawk.

...