Я понимаю, как это сделать в python, только с
line = db_file.readline()
ll=string.split(line)
но как я могу сделать то же самое в bash? действительно ли можно сделать это так просто?
Я понимаю, как это сделать в python, только с
line = db_file.readline()
ll=string.split(line)
но как я могу сделать то же самое в bash? действительно ли можно сделать это так просто?
s='foo bar baz'
a=( $s )
echo ${a[0]}
echo ${a[1]}
...
Это зависит от того, что вы подразумеваете под расколом. Если вы хотите перебирать слова в строке, которая находится в переменной, вы можете просто перебирать ее. Например, допустим, что переменная line
равна this is a line
. Затем вы можете сделать это:
for word in $line; do echo $word; done
Это напечатает:
this
is
a
line
for .. in $var
разделяет $var
, используя значения в $IFS
, значение по умолчанию которого означает "разделенные пробелы и новые строки".
Если вы хотите читать строки от пользователя или файла, вы можете сделать что-то вроде:
cat $filename | while read line
do
echo "Processing new line" >/dev/tty
for word in $line
do
echo $word
done
done
Для чего-то еще, вам нужно быть более явным и более подробно определить свой вопрос.
Примечание. Отредактировано для удаления башизма, но я все еще сохранял cat $filename | ...
, потому что мне больше нравится перенаправление.
Если вам требуется конкретное слово из строки, awk может оказаться полезным, например
$ echo $LINE | awk '{print $2}'
Печатает второе разделенное пробел слово в $LINE. Вы также можете разделить на другие символы, например.
$ echo "5:6:7" | awk -F: '{print $2}' 6
echo $line | tr " " "\n"
дает результат, аналогичный результатам большинства ответов выше; без использования петель.
В вашем случае вы также упомянете ll=<...output...>
,
так, (учитывая, что я не знаю много python и предполагаю, что вам нужно назначить вывод переменной),
ll=`echo $line | tr " " "\n"`
должно быть достаточно (вспомните echo "$ll"
вместо echo $ll
)
$ line="these are words"
$ ll=($line)
$ declare -p ll # dump the array
declare -a ll='([0]="these" [1]="are" [2]="words")'
$ for w in ${ll[@]}; do echo $w; done
these
are
words
сделайте это
while read -r line
do
set -- $line
echo "$1 $2"
done <"file"
$1, $2 и т.д. будут вашим 1-м и 2-м разделенными полями. используйте [email protected], чтобы получить все значения. Используйте $#, чтобы получить длину "полей".
Проще,
echo $line | sed 's/\s/\n/g'
\ s → пробельный символ (пробел, табуляция, NL, FF, VT, CR). Во многих системы также действительны [: пробел:]
\n → новая строка
Параметр -a
read
позволит вам разбить строку, считанную символами, содержащимися в $IFS
.
Если у вас уже есть строка текста в переменной $LINE, вы должны иметь возможность сказать
for L in $LINE; do
echo $L;
done