LINUX.ORG.RU

Обработка строки в скрипте


0

1

Здравствуйте.

Есть такая задача: в bash-скрипте имеется некоторая переменная $NAMES, в которой через пробел (или другой символ, не важно) перечислено некоторое количество слов (вообще это имена файлов). Например:

# echo $NAMES
first second third fourth fifth sixth seventh

Количество слов в переменной заранее неизвестно.
Нужно каким-то образом откинуть N-слов с конца строки. Например, если N равно 3, то на выходе должно получиться:

# echo $NAMES
first second third fourth

Подскажите как такое можно сделать.

превратить пробелы в \n, полученный список слов обратить, пропустить нужное количество строк, остальное взять и заменить обратно \n на пробел.

Да, мы не ищем легких путей. Сортировка и списки нам неведомы.

anonymous
()
echo $NAMES | cut -d' ' -f1-$(expr $(echo $NAMES|wc -w) - 3)
sdio ★★★★★
()
perl -e 'print"@ARGV[0..$#ARGV-3]\n"' $NAMES

;)

arsi ★★★★★
()
Ответ на: комментарий от sdio

врядли в контексте интерпретатора (шелла или авк) возможны readonly переменные. По крайне мере, сходу не придумал, как такое можно сделать

zolden ★★★★★
()

Всем большое спасибо, все примеры рабочие :)

InfectedM
() автор топика
Ответ на: комментарий от zolden

zolden>врядли в контексте интерпретатора (шелла или авк) возможны readonly переменные.

rs6 [/]> NAMES="first second third fourth fifth sixth sevent"
rs6 [/]> echo $NAMES   
first second third fourth fifth sixth sevent
rs6 [/]> echo $NAMES | awk '{NF-=3;print}'      
first second third fourth fifth sixth sevent
rs6 [/]> uname
AIX
rs6 [/]> oslevel -q
Known Maintenance Levels
------------------------
4.2.1.0

Тоже самое на

rs55: / => oslevel -q
Known Maintenance Levels
------------------------
5.3.0.0

Тоже самое на

[root@sun30d4]/ # NAMES="first second third fourth fifth sixth sevent"
[root@sun30d4]/ # echo $NAMES   
first second third fourth fifth sixth sevent
[root@sun30d4]/ # echo $NAMES | awk '{NF-=3;print}' 
first second third fourth fifth sixth sevent
[root@sun30d4]/ # uname -a
SunOS sun30d4 5.10 Generic_118833-17 sun4u sparc SUNW,Sun-Fire

Тоже самое на HP-UX B.11.11

sdio ★★★★★
()

echo $NAMES | rev | cut -f 4- -d ' ' | rev

drull ★☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.