fuumind Asked: 2019-08-28 02:42:05 +0800 CST2019-08-28 02:42:05 +0800 CST 2019-08-28 02:42:05 +0800 CST 将字符串合并为列以在 bash 中创建表 772 考虑以下字符串: $ columnA="A1\nA2\nA3" $ columnB="B1\nB2\nB3" $ columnC="C1\nC2\nC3" 使用 Bash,我如何合并这些,以便获得另一个具有以下内容的字符串: $ echo "$table" A1;B1;C1\nA2;B2;C2\nA3;B3;C3 bash merge 2 个回答 Voted Best Answer Prvt_Yadav 2019-08-28T03:32:20+08:002019-08-28T03:32:20+08:00 您可以使用 commandpaste和 process-substitution: table="$(paste -d ';' <(echo -e "$columnA") <(echo -e "$columnB") <(echo -e "$columnC"))" echo "$table"将输出为: A1;B1;C1 A2;B2;C2 A3;B3;C3 也不要忘记使用-eflag echo,否则它不会考虑\n,尤其是你会得到输出: A1\nA2\nA3;B1\nB2\nB3;C1\nC2\nC3 或者,使用 printf: table="$(paste -d ';' <(printf "$columnA") <(printf "$columnB") <(printf "$columnC"))" Freddy 2019-08-28T03:24:32+08:002019-08-28T03:24:32+08:00 使用 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
您可以使用 command
paste
和 process-substitution:echo "$table"
将输出为:也不要忘记使用
-e
flagecho
,否则它不会考虑\n
,尤其是你会得到输出:或者,使用 printf:
使用 GNU
datamash
,xargs
,tr
:printf '%b\n' ...
打印由换行符分隔的值xargs -n3
结合每行分隔的三个值空间datamash -t' ' transpose
转置输出tr ' ' ';'
用分号替换空格${table//$'\n'/\\n}
用文字替换换行符\n