bash / sed / awk / etc 다른 모든 줄 바꿈 제거 unoptimized Runtime Name: vmhba2:C0:T1:L14 Group State: active unoptimized Runtime

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이 중 하나가 될 것입니다 그래서, 01. 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/ /공간 개행 문자가 대체
$.행 번호입니다