문자열을 열로 결합하여 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 사용 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행당 공백으로 구분된 3개의 값을 결합합니다.
  • datamash -t' ' transpose출력을 조옮김
  • tr ' ' ';'공백을 세미콜론으로 바꾸기
  • ${table//$'\n'/\\n}줄 바꿈을 텍스트로 바꾸기\n

관련 정보