다음 문자열을 고려하십시오.
$ 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