3

我想从文本文件中读取行并将它们保存在变量中。

  cat ${1} | while read name; do

  namelist=${name_list},${name}

  done

该文件如下所示:

David

Kevin

Steve
etc.

而我想得到这个输出

大卫、凯文、史蒂夫等。

并将其保存到变量 ${name_list}

4

4 回答 4

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

重新编辑:所以,感谢弗雷德里克的合法投诉:

name_list=""
while read name
do 
  if [[ -z $name_list ]]; then
      name_list="$name"
   else
      name_list="$name_list,$name"
   fi
done < file.txt
于 2013-04-21T21:00:28.983 回答
2

命令:

$ tr -s '\n ' ',' < sourcefile.txt             # Replace newlines and spaces with [,]

这可能会返回 a,作为最后一个字符(也可能是第一个字符)。去除逗号并返回令人满意的结果:

$ 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
于 2013-04-22T05:27:16.397 回答
1

使用column, 和sed:

namelist=$(column input | sed 's/\t/,/g')
于 2013-04-22T06:48:20.377 回答
0
variable=`perl -lne 'next if(/^\s*$/);if($a){$a.=",$_"}else{$a=$_};END{print $a}' your_file`
于 2013-04-22T05:31:34.023 回答