我想将以下列表排列成特定格式
当前的:
42.53e-12
43.64e-12
45.78e-12
49.86e-12
57.87e-12
73.68e-12
105.3e-12
需要
"42.53e-12, 43.64e-12, 45.78e-12, 49.86e-12, 57.87e-12, 73.68e-12, 105.3e-12"
所有数字均以逗号分隔,列表包含在引号中。
答案1
使用awk
:
awk '{printf (NR>1)?", "$0:"\""$0} END {print "\""}' infile
或者以另一种方式:
awk '$1="\""$1' RS= ORS="\"\n" OFS=', ' infile
echo
或者使用和命令的组合sed
(假设您的文件中没有空格,其中发生了 shell 分词)
sed 's/ /, /g' <(echo \"$(<infile)\")
答案2
纯的POSIX
sh
,(因为它不加载外部程序,所以对于小文件来说这是最快的,如果dash
是当前的 shell):n='"'; while read x; do n="$n$x, "; done < file; echo ${n%,*}\"
Pure
bash
,(对于小文件来说最快,如果bash
是当前的 shell):n=$(<file); echo \"${n// /, }\"
纯的
sed
:sed -n 'H;${g;s/\n/, /g;s/, $//;s/, \(.*\)/"\1"/p}' file
外壳工具:
/bin/echo -e \"$(xargs printf "%s, " < file)'\b\b"'
答案3
实现目标的几种方法:
paste
+sed
解决方案:
paste -d',' -s file | sed 's/,/, /g; s/^\|$/"/g'
python
解决方案:
python -c 'import sys; print("\""+", ".join(i.strip() for i in sys.stdin)+"\"")' <file
输出(两种方法):
"42.53e-12, 43.64e-12, 45.78e-12, 49.86e-12, 57.87e-12, 73.68e-12, 105.3e-12"
答案4
awk 'BEGIN{ ORS=""; pre="\""}{print pre $0; pre=","}END{ORS="\n";print "\""}'