SED 또는 AWK를 사용하여 행을 열로 이동

SED 또는 AWK를 사용하여 행을 열로 이동

행별로 생성된 보고서가 있는데 이를 열로 이동해야 합니다. 레코드당 행 수는 항상 동일합니다. 이는 Linux의 bash 스크립트에 있으므로 사용 가능한 표준 도구를 사용하고 싶습니다. 나는 awk및 를 선호합니다 sed.

이것을 변경해야 합니다.

R1
R2
R3
R4
R5
R6
R7
R1
R2
R3
R4
R5
R6
R7

이와 관련하여:

R1,R2,R3,R4,R5,R6,R7
R1,R2,R3,R4,R5,R6,R7

어떤 도움이라도 대단히 감사하겠습니다.

여러 사람들이 위의 데이터에 실제로 적용되는 몇 가지 아주 좋은 예를 나에게 추천했습니다. 불행히도 내 데이터는 좀 더 신뢰할 수 있습니다. 아래는 제가 사용하고 있는 준현실 세계의 예입니다.

이것:

00000
ND00000056888
Doe, Jane J
F
99 Y
09/01/2014 8:01:08 AM
EE
00001
ND00000056889
Doe, John J
M
66 Y
09/02/2014 5:01:08 PM
DD

도착하다:

00000;ND00000056888;Doe, Jane J;F;99 Y;09/01/2014 8:01:08 AM;EE
00001;ND00000056889;Doe, John J;M;66 Y;09/02/2014 5:01:08 PM;DD

쉼표나 단일 공백을 제외한 모든 구분 기호가 가능합니다.

답변1

노력하다

 awk '{printf "%s%s",$0,NR%7?",":"\n" ; }' 

가장 중요한 부분

  • NR%7?",":"\n": if-then-else:
    • if (NR%7) : NR, (레코드 수) % (모듈로) 7 (7로 나눈 != 0 )
    • 그런 다음 a','를 인쇄하십시오.
    • 그렇지 않으면 새 줄입니다.
  • $0전체 라인이에요

답변2

sed나 awk에 중독되지 않았다면 다음을 사용하세요.반죽

echo "R1
R2
R3
R4
R5
R6
R7
R1
R2
R3
R4
R5
R6
R7" | paste -d, - - - - - - -
R1,R2,R3,R4,R5,R6,R7
R1,R2,R3,R4,R5,R6,R7

두 번째 예는 어려움 없이 작동합니다. 쉘이 볼 수 없도록 세미콜론을 인용하면 됩니다.

paste -d ';' - - - - - - - <filename
00000;ND00000056888;Doe, Jane J;F;99 Y;09/01/2014 8:01:08 AM;EE
00001;ND00000056889;Doe, John J;M;66 Y;09/02/2014 5:01:08 PM;DD

답변3

awk '{ ORS=NR%7?",":"\n" }1'awk의 또 다른 방법입니다.

답변4

또 다른 방법이 있습니다:

pr -a7 -l1 -s";"파일 이름

이것은 약어입니다

pr --columns=7 --across --length=1 --separator=";"파일 이름

관련 정보