考虑以下字符串:
$ columnA="A1\nA2\nA3"
$ columnB="B1\nB2\nB3"
$ columnC="C1\nC2\nC3"
使用 Bash,如何合并这些,以便获得另一个包含以下内容的字符串:
$ echo "$table"
A1;B1;C1\nA2;B2;C2\nA3;B3;C3
答案1
您可以使用命令paste
和进程替换:
table="$(paste -d ';' <(echo -e "$columnA") <(echo -e "$columnB") <(echo -e "$columnC"))"
echo "$table"
输出如下:
A1;B1;C1
A2;B2;C2
A3;B3;C3
另外不要忘记使用-e
标志与echo
,否则它不会考虑\n
,特别是你会得到输出:
A1\nA2\nA3;B1\nB2\nB3;C1\nC2\nC3
或者,使用 printf:
table="$(paste -d ';' <(printf "$columnA") <(printf "$columnB") <(printf "$columnC"))"
答案2
使用 GNU datamash
、xargs
、tr
:
$ table=$(printf '%b\n' "$columnA" "$columnB" "$columnC" | xargs -n3\
| datamash -t' ' transpose | tr ' ' ';')
$ table="${table//$'\n'/\\n}"
$ echo "$table"
A1;B1;C1\nA2;B2;C2\nA3;B3;C3
printf '%b\n' ...
打印由换行符分隔的值xargs -n3
组合每行以空格分隔的三个值datamash -t' ' transpose
转置输出tr ' ' ';'
用分号替换空格${table//$'\n'/\\n}
用文字替换换行符\n