행을 맞춤 행으로 병합[닫기]

행을 맞춤 행으로 병합[닫기]

입력하다:

ID   Name   NUMBER

1ABC234)234-2345,

2CBF23588900,

3knl334235354,

4gkmnk436563654,

원하는 출력:

    *ID   Name   NUMBER            ID   Name   NUMBER       ID   Name   NUMBER*
LINE--1    1ABC234)234-2345,2CBF23588900,3knl334235354,
LINE--2    4gkmn436563654,5JNKN53546536,6jknk5643545645,
LINE--3    7........,8..........,9............,
LINE--4    10.........,11.......,12...........

이 명령을 사용해 보았지만 불행히도 모든 것이 한 줄로 바뀌었습니다.

tr -d '\n'<sample.txt

하지만 위에서 설명한 것과 똑같은 파일을 생성하려면 unix 명령을 사용해야 합니다.

답변1

줄을 병합하고 각 새 줄에는 입력 파일의 세 줄이 포함되어 있으며 동일한 헤더를 유지하려고 한다고 가정해 보겠습니다.

$ ( head -n 1 file; sed '1d' file | paste -d '\0' - - - ) >newfile
$ cat newfile
ID   Name   NUMBER
1ABC234)234-2345,2CBF23588900,3knl334235354,
4gkmnk436563654,line5,line6,
line7,line8,line9,

내가 사용하는 입력 파일은

ID   Name   NUMBER
1ABC234)234-2345,
2CBF23588900,
3knl334235354,
4gkmnk436563654,
line5,
line6,
line7,
line8,
line9,

head명령은 파일의 헤더만 출력하는 반면 sedpaste파이프는 구분 기호를 삽입하지 않고 나머지 줄을 3개 그룹으로 배포합니다. head그러면 파이프와 파이프의 출력이 새 파일로 리디렉션됩니다.

언급된 특정 헤더가 필요한 경우 head전체 명령을 echo 'insert header text here'.

각 행 등이 필요한 경우 다음을 LINE--1통해 결과를 전달합니다.pasteawk '{ print "LINE--" NR, $0 }'

$ ( head -n 1 file; sed '1d' file | paste -d '\0' - - - | awk '{ print "LINE--" NR, $0 }') >newfile    
$ cat newfile
ID   Name   NUMBER
LINE--1 1ABC234)234-2345,2CBF23588900,3knl334235354,
LINE--2 4gkmnk436563654,line5,line6,
LINE--3 line7,line8,

관련 정보