Shell scipt에서 여러 줄의 테이블 형식을 인쇄하고 싶습니다.

Shell scipt에서 여러 줄의 테이블 형식을 인쇄하고 싶습니다.

sed또는 같은 도구를 사용하여 표 형식으로 입력을 인쇄하고 싶습니다 awk.

입력하다:

Line1
Line2
Line3
Line4
Line5
Line6
Line7
Line8

원하는 출력:

Line1 Line2 Line3 Line4 
Line5 Line6 Line7 Line8

답변1

그룹을 구분하는 빈 줄이 없으면 네 줄의 그룹을 인쇄합니다.

$ awk '{a=a (length(a)?OFS:"") $0} NR>1 && NR%4==0{print a; a=""}' file
Line1 Line2 Line3 Line4
Line5 Line6 Line7 Line8

인쇄할 줄 그룹을 구분하는 빈 줄이 있는 경우(예:이전 개정판), 그 다음에:

$ cat file
Line1
Line2
Line3
Line4

Line5
Line6
Line7
Line8
$ awk '{a=a (length(a)?OFS:"") $0} !length($0){print a; a=""} END{print a}' file
Line1 Line2 Line3 Line4 
Line5 Line6 Line7 Line8

답변2

선의 길이가 다른 경우

  • 지금까지 제안된 답변 중 하나를 시작으로,
  • 필요에 따라 열을 탭으로 구분하도록 수정하고(이는 데이터에 탭이 없다고 가정함)
  • 파이프를 통한 출력column -t -s$'\t'

예를 들어(공백 구분 기호가 없다고 가정):

$catfile178492
이것
빠른
갈색
여우
뛰어 넘다
이것
게으른
개.
$ 붙여넣기 - - - - < 파일178492
민첩한 갈색여우
저 게으른 개를 뛰어넘으세요.
                    # 기본적으로 붙여넣기는 탭으로 출력 열을 구분합니다.
$ 붙여넣기 - - - - < file178492 열 -t -s$'\t'
민첩한 갈색여우
저 게으른 개를 뛰어넘으세요.
$ awk '{a=a (a?OFS:"") $0} NR>1 && NR%4==0{print a=""}' file178492
민첩한 갈색여우
저 게으른 개를 뛰어넘으세요.
                    # 지정  -vOFS=$'\t'  awk는 출력 필드를 탭으로 구분합니다.
$awk-vOFS=$'\t''{a=a(a?OFS:"") $0} NR>1 && NR%4==0{print a=""}' file178492
민첩한 갈색여우
저 게으른 개를 뛰어넘으세요.
$ awk -vOFS=$'\t' '{a=a (a?OFS:"") $0} NR>1 && NR%4==0{print a=""}' file178492 |column-t -s$'\t'
민첩한 갈색여우
저 게으른 개를 뛰어넘으세요.

노트:

  • $'…'명확하게 표시되고 장치 독립적인 방식으로 명령에 제어 문자를 입력할 수 있는 bash 구문입니다.  $'\t'탭 문자를 지정합니다. bash를 사용하지 않고 $'\t'작동하지 않는다면, Tab또는 Ctrl+ V, 를 입력해 보세요 Tab. (이것이 작동하지 않으면 Ctrl+ I또는 Ctrl+ V, Ctrl+를 시도하십시오 I.)
  • 열 사이에 더 많은 공간을 원하는 경우. 명령 -o' '에 추가 column:
$ 붙여넣기 - - - - < file178492 열 -t -s$'\t' -o' '
민첩한 갈색여우
게으른 개를 뛰어넘으세요.

답변3

나는 당신이 한 줄에 그룹화된 부분을 인쇄하기를 원한다고 생각합니다. 이 기본 awk 스크립트가 그렇게 해야 합니다.

awk 'BEGIN{RS=""}{gsub("\n"," ");print}' test.txt

관련 정보