我想从文本文件中读取行并将它们保存在变量中。
cat ${1} | while read name; do
namelist=${name_list},${name}
done
文件如下所示:
David
Kevin
Steve
etc.
我希望得到这个输出
大卫,凯文,史蒂夫等。
并将其保存到变量$ {name_list}
答案 0 :(得分:2)
name_list=""
for name in `cat file.txt`
do VAR="$name_list,$i"
done
编辑:此脚本在name_list的开头留下“,”。有很多方法可以解决这个问题。例如,在bash中这应该有效:
name_list=""
for name in `cat file.txt`; do
if [[ -z $name_list ]]; then
name_list="$i"
else
name_list="$name_list,$i"
fi
done
重新编辑:感谢Fredrik的合理投诉:
name_list=""
while read name
do
if [[ -z $name_list ]]; then
name_list="$name"
else
name_list="$name_list,$name"
fi
done < file.txt
答案 1 :(得分:2)
$ tr -s '\n ' ',' < sourcefile.txt # Replace newlines and spaces with [,]
这可能会返回,
作为最后一个字符(可能是第一个字符)。
剃掉逗号并返回令人满意的结果:
$ name_list=$(tr -s '\n ' ',' < sourcefile.txt) # store the previous result
$ name_list=${tmp%,} # shave off the last comma
$ name_list=${tmp#,} # shave off any first comma
此解决方案运行速度提高44%,并在所有Unix平台上产生一致且有效的结果。
# This solution
python -mtimeit -s 'import subprocess' "subprocess.call('tmp=$(tr -s "\n " "," < input.txt);echo ${tmp%,} >/dev/null',shell = True)"
100 loops, best of 3: 3.71 msec per loop
# Highest voted:
python -mtimeit -s 'import subprocess' "subprocess.call('column input.txt | sed "s/\t/,/g" >/dev/null',shell = True)"
100 loops, best of 3: 6.69 msec per loop
答案 2 :(得分:1)
使用column
和sed
:
namelist=$(column input | sed 's/\t/,/g')
答案 3 :(得分:0)
variable=`perl -lne 'next if(/^\s*$/);if($a){$a.=",$_"}else{$a=$_};END{print $a}' your_file`