[UNIX shell]Выполнить команду для каждой строчки файла

VitMix

Дано: тестовый файл
Надо: в цикле для каждой строчки этого файла выполнить заданную команду, передав ей эту строчку в качестве параметра командной строки
Как это можно сделать в UNIX shell?

dgaf

while read i; do echo $i; done < file

sany79

Посмотри xargs. Например, разложить на множители числа от 1 до 12:
[host ~]% seq 1 12 |xargs factor
1: 1
2: 2
3: 3
4: 2 2
5: 5
6: 2 3
7: 7
8: 2 2 2
9: 3 3
10: 2 5
11: 11
12: 2 2 3
Вместо "seq ... |" можно поставить "cat file.txt |", и будет то, что тебе нужно.

VitMix

while read i; do echo $i; done < file
Да, похоже, то, что надо.

apl13

А for i in `cat filename` ; do ; done не катит?

ppplva

Оно еще и строчки по пробелам разобьет.

apl13

Да, спасибо, виноват.

apl13

Путем дальнейшего экспериментирования на этом пути дошел вот до чего :
$cat file.txt
This one is line 1.
And here comes line 2.
The third line is the last one.
$for i = 1; i <= `wc -l file.txt |awk '{print $1}'`; i++ ; do echo "$i. `head -n $i file.txt | tail -n 1`" ; done
1. This one is line 1.
2. And here comes line 2.
3. The third line is the last one.

artimon

В порядке извращения
(IFS=$'\n'; for i in `cat a.txt`; do echo $i; done;)

apl13

Типа, изменение переменных в сабшелле во внешнем мире ни на что не влияет?
Грубо, но эффективно. (с)

VitMix

А for i in `cat filename` ; do ; done не катит?
Нет

apl13

Попробуй прочитать тред дальше.
Оставить комментарий
Имя или ник:
Комментарий: