LINUX.ORG.RU
ФорумAdmin

bash-скрипт


0

0

Как перебрать строки в файле? Если for i in `cat ./$i`; do , то перебираюстя слова, а как вытащить всю строку?

anonymous

sasha@as255:~$ cat aaa
this is line 1
this is line 2

sasha@as255:~$ for line in `cat aaa`; do echo $line; done
this
is
line
1
this
is
line
2
sasha@as255:~$ export IFS=^M
sasha@as255:~$ for line in `cat aaa`; do echo $line; done
this is line 1
this is line 2
sasha@as255:~$

sasha999 ★★★★
()

[spirit@tank trn]$ export IFS=^M
[spirit@tank trn]$ a=1;for i in `cat aaa`; do echo "$a \"$i\"";let a=$a+1; done
1 "this is line 1
this is line 2"
------
похоже так оно выводит 2-е строки как одну, в то время, как раньше разбивало:
[spirit@tank trn]$ export IFS=" "
[spirit@tank trn]$ a=1;for i in `cat aaa`; do echo "$a \"$i\"";let a=$a+1; done
1 "this"
2 "is"
3 "line"
4 "1
this"
5 "is"
6 "line"
7 "2"

spirit ★★★★★
()

А прикол заключается в том, как оно воспринимает сам перенос строки.
Если сделать так, то все получается:
[spirit@tank trn]$ export IFS="
> "
[spirit@tank trn]$ a=1;for i in `cat aaa`; do echo "$a \"$i\"";let a=$a+1; done
1 "this is line 1"
2 "this is line 2"

Т.е. написать export IFS=" и, не закрывая кавычек нажать <Enter>, а потом закрыть. Точно так же и в скрипте:
--- cut ---
#!/bin/bash

export IFS="
"
a=1;for i in `cat aaa`; do echo "$a \"$i\"";let a=$a+1; done
--- cut ---
Вроде работает

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