我知道如何在python中完成它,只需
line = db_file.readline()
ll=string.split(line)
但我怎样才能在bash中做同样的事情?是否真的有可能以这么简单的方式做到这一点?
答案 0 :(得分:119)
s='foo bar baz'
a=( $s )
echo ${a[0]}
echo ${a[1]}
...
答案 1 :(得分:32)
如果你想要一行中的特定单词,awk可能会有用,例如
$ echo $LINE | awk '{print $2}'
在$ LINE中打印第二个空格分隔的单词。您还可以拆分其他字符,例如
$ echo "5:6:7" | awk -F: '{print $2}' 6
答案 2 :(得分:29)
这取决于 split 的含义。如果你想迭代一行中的单词,这是一个变量,你可以迭代。例如,假设变量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
对于其他任何事情,您需要更加明确并更详细地定义您的问题。
注意:编辑删除bashism,但我仍然保留cat $filename | ...
,因为我更喜欢重定向。
答案 3 :(得分:16)
echo $line | tr " " "\n"
给出的输出类似于上面大多数答案的输出;不使用循环。
在您的情况下,您还提到了ll=<...output...>
,
所以,(假设我不太了解python并假设你需要将输出分配给变量),
ll=`echo $line | tr " " "\n"`
应该足够了(记得echo "$ll"
而不是echo $ll
)
答案 4 :(得分:9)
$ 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
答案 5 :(得分:9)
这样做
while read -r line
do
set -- $line
echo "$1 $2"
done <"file"
$ 1,$ 2等将是你的第一和第二分裂“领域”。使用$ @来获取所有值。使用$#来获取“字段”的长度。
答案 6 :(得分:4)
read
的-a
选项可让您按$IFS
中包含的字符拆分读入的行。
答案 7 :(得分:4)
更简单,
echo $line | sed 's/\s/\n/g'
\ s - &gt;空白字符(空格,制表符,NL,FF,VT,CR)。在很多 系统也有效[:space:]
\ n - &gt;新行
答案 8 :(得分:2)
如果您已经在变量$ LINE中包含了您的文本行,那么您应该可以说
for L in $LINE; do
echo $L;
done