将字符串合并为列以在 bash 中创建表

将字符串合并为列以在 bash 中创建表

考虑以下字符串:

$ 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 datamashxargstr

$ 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

相关内容