LINUX.ORG.RU

bash + awk


0

2

затупляю, есть набор файлов скажем
a.txt b.txt c.txt и так далее

пишем скрипт, где есть численная переменная по которой надо выбирать определёный файл.
slist=`ls *.txt`
s=`echo $slist | awk '{print $2}'`
echo $s
на выходе получим b.txt

теперь всё тоже самое только с циклом
x=1
while [ «$x» -lt 4 ]; do
s=`echo $slist | awk '{print $x}'`
echo $s
x=$(($x + 1))
done

на выходе получаем весь список файлов а хотелось бы a.txt b.txt c.txt и всё.

как сделать? заранее спасибо

★★★

у тебя всё сделано порнографически, смотри как надо:

$ ls -1
a.txt
b.txt
c.txt
$ x=0; a=(*.txt); for ((i=0; i<3; i++)); do echo $i" "${a[i]}; done
0 a.txt
1 b.txt
2 c.txt

anonymous ()
Ответ на: комментарий от anonymous

круто, тока нихера не понятно. можно пояснить?

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

но в данном конкретном случае всё делается проще:

$ ls -1
a.txt
b.txt
c.txt
$ ls -1 |head -2
a.txt
b.txt

anonymous ()

где есть численная переменная по которой надо выбирать

это обязательно?, а то ведь и «for file in *.txt ...» можно

anonymous ()
Ответ на: комментарий от anonymous

я понял про arrays, я не понял как он инициализировался через ls -l в a(*.txt)

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

ls тут не причём вообще:

$ ls -1
a.txt
b.txt
c.txt
$ echo *.txt
a.txt b.txt c.txt
это shell file expansion

anonymous ()

Лучше бы это в general.

anonymous ()
Ответ на: комментарий от anonymous

так можно сразу объявлять массивы с шаблоном типа array(*.nii.gz) и всё туда сразу попадёт?

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

vaborg

так можно сразу объявлять массивы с шаблоном типа array(*.nii.gz) и всё туда сразу попадёт?

да. любая строка разделённая пробельными символами. например

a=(x y z)
даст массив из трёх эл-тов.

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