bash 명령은 다음을 출력합니다.
Runtime Name: vmhba2:C0:T3:L14
Group State: active
Runtime Name: vmhba3:C0:T0:L14
Group State: active unoptimized
Runtime Name: vmhba2:C0:T1:L14
Group State: active unoptimized
Runtime Name: vmhba3:C0:T3:L14
Group State: active
Runtime Name: vmhba2:C0:T2:L14
Group State: active
다음과 같이 보이도록 파이프를 연결하고 싶습니다.
Runtime Name: vmhba2:C0:T1:L14 Group State: active
Runtime Name: vmhba3:C0:T3:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T2:L14 Group State: active
[...]
즉, 다른 모든 줄 바꿈을 제거
나는 시도 ... |tr "\nGroup" " "
했지만 그것은 모든 줄 바꿈을 제거하고 다른 문자도 먹었습니다. 감사
답변
지금 테스트 할 수는 없지만
... | paste - -
해야 돼
답변
한 가지 가능성은 다음과 같습니다.
awk 'ORS=NR%2?" ":"\n"'
줄 번호를 2로 균등하게 나누면 줄 바꿈으로 끝나고 그렇지 않으면 공백으로 끝납니다.
(테스트 : CentOS 6, GNU Awk 3.1.7)
sed 사용 ( 설명 참조 ) :
sed ':a;N;$!ba;s/\nGroup/ Group/g'
더 읽을 거리 :
답변
를 사용 sed
하려면 전체 파일을 메모리로 읽어야 할 이유가 없습니다. 다음과 같이 다른 모든 줄을 병합 할 수 있습니다.
sed 'N;s/\n/ /' inputfile
공백 대신 원하는 문자를 사용하십시오.
awk를 사용하는 또 다른 방법이 있습니다.
awk '{printf "%s", $0; if (getline) print " " $0; else printf "\n"}' inputfile
if/else
취급하는 파일의 행의 홀수가있는 경우. 이것이 없으면 홀수 마지막 줄이 두 번 인쇄됩니다. 그렇지 않으면 비교를 위해 다음을 수행 할 수 있습니다.
awk '{printf "%s", $0; getline; print " " $0}'
답변
가장 관용적 인 방법 awk
은 다음과 같습니다.
awk 'ORS=NR%2?FS:RS' file
출력합니다 :
Runtime Name: vmhba2:C0:T3:L14 Group State: active
Runtime Name: vmhba3:C0:T0:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T1:L14 Group State: active unoptimized
Runtime Name: vmhba3:C0:T3:L14 Group State: active
Runtime Name: vmhba2:C0:T2:L14 Group State: active
이를 설명하기 위해 내장 변수 각각을 정의해야합니다.
RS
레코드 구분 기호. 기본값은\n
(새 줄)입니다.ORS
출력 레코드 구분 기호. 기본값은\n
(새 줄)입니다.FS
필드 구분 기호. 기본값은(공백)입니다.
NR
레코드 수
기본 레코드 구분 기호는 줄 바꾸기이므로 레코드는 기본적으로 줄입니다.
NR%2
의 계수이며 NR/2
이 중 하나가 될 것입니다 그래서, 0
나 1
. 0
짝수 줄과 1
홀수 줄.
var=condition?condition_if_true:condition_if_false
삼항 연산자입니다.
ORS=NR%2?FS:RS
출력 레코드 구분 기호를 정의 한다고 말하면 다음과 같습니다.
- 레코드 수가 양식
2k + 1
, 즉 짝수 라인에있는 경우 출력 레코드 구분 기호는FS
공백으로 설정됩니다. - 레코드 수가 양식
2k
, 즉 홀수 행인 경우 출력 레코드 구분 기호는RS
새 행으로 설정됩니다.
이런 방식으로 홀수 줄은 공백으로 끝나고 다음 줄과 연결됩니다. 그 줄 뒤에 새 줄이 인쇄됩니다.
관용적 인 awk에 대한 자세한 정보 .
답변
이것은 Linux에서 나를 위해 작동합니다.
... | tr "\\n" " "
이것은 개행 문자의 빈 공간을 대체합니다. 당신은 해야한다 일들이 제대로 작동하려면 개행 문자를 탈출.
답변
bash에서 :
... | while read l1; do read l2; echo "$l1 $l2"; done
답변
Perl이 옵션 인 경우 :
perl -pe 's/\n/ / if $. % 2 == 1' file
s/\n/ /
공간 개행 문자가 대체
$.
행 번호입니다