행별로 생성된 보고서가 있는데 이를 열로 이동해야 합니다. 레코드당 행 수는 항상 동일합니다. 이는 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=";"파일 이름