여러 줄의 명령 출력을 한 줄로 결합하는 방법은 무엇입니까?

여러 줄의 명령 출력을 한 줄로 결합하는 방법은 무엇입니까?

Bash 쉘의 내 명령은 다음과 같이 출력됩니다.

username
country

하지만 인쇄물을 다음과 같이 수정하고 싶습니다.

username - country

감사해요.

답변1

나는 다음과 같은 일을 할 것입니다 :

$ seq 6 | awk '{printf "%s", sep $0; sep = " - "}; END {if (NR) print ""}'
1 - 2 - 3 - 4 - 5 - 6

또는:

$ seq 6 | paste -d ' - \n' - /dev/null /dev/null -
1 - 2
3 - 4
5 - 6

또는:

$ seq 5 | sed '$!N;s/\n/ - /'
1 - 2
3 - 4
5

두 줄의 출력이면 다음과 같이 할 수도 있습니다.

$ seq 2 | { IFS= read -r a; IFS= read -r b; printf '%s\n' "$a - $b"; }
1 - 2

쉘에는 bashwhere , 같은 read것들이 printf내장되어 있어 별도의 명령을 실행할 필요가 없습니다. 에서는 bash이 처리를 수행하기 위해 추가 프로세스 생성을 저장하는 옵션을 설정할 수 있습니다 lastpipe(비대화형 셸 인스턴스에서만).

답변2

tr한 문자를 다른 문자로 변환할 수 있습니다.

echo "username
country
town" | tr '\n' ' '

산출:

username country town

tr -d문자(개행)를 아무것도 없는 것으로 바꾸는 데 사용됩니다 .

echo "username
country
town" | tr -d '\n'

산출:

usernamecountrytown

그러나 개행 문자를 몇 개의 문자로 대체하려는 경우 tr이것만으로는 충분하지 않습니다. 그럼에도 불구하고 매우 간단한 명령이기 때문에 이에 대해 이야기하고 있습니다.

하지만 다음과 같이 할 수 있습니다 sed.

echo "username
country
town" | sed ":a; N; s/\n/ - /; ta;"

산출:

username - country - town

답변3

 awk 'ORS=" - "{print $0}' filename|awk '{gsub(/- $/,"",$0);print }'

산출

username - country

답변4

파이프를 통해 여기에 연결합니다.

sed -z 's|\n| - |'

GNU를 사용하여 sed개행 문자를 -.

관련 정보