문서를 읽어보세요

문서를 읽어보세요

다음 순서로 세부 정보가 포함된 파일이 있습니다.

Name1
School Name1
State1
Name2
School Name2
State2
Name3
School Name3
State3

3번 반복하고 싶습니다(예제 파일에는 3개의 그룹이 포함되어 있지만 여기에서 논리를 생각했습니다(sic) n 그룹이 있으면 루프는 n 그룹을 실행해야 함). 첫 번째 루프에서는 첫 번째 줄부터 시작해야 합니다 파일을 3행까지 읽은 다음 다음 루프에서 4행에서 6행, 그리고 7행에서 9행까지 같은 세트(이름, 학교 이름, 주)에 더 많은 항목이 있는 경우 계속 읽습니다. 각 반복마다 파일의 입력을 다른 표준 출력 파일에 공급합니다. 파일에서 입력을 받아 다른 파일에 공급하는 작업 스크립트가 있지만 컬렉션이 중복되면 논리가 작동하도록 하는 것이 어렵습니다.

답변1

한 번에 3줄씩 파일을 읽으려면 이렇게 합니다.

while
    IFS= read -r name
    IFS= read -r school
    IFS= read -r state
do
    echo "$name:$school:$state"
done < input.file > output.file

while 루프의 "조건"으로 많은 명령을 사용할 수 있다는 사실을 활용하십시오.

답변2

awk정확히 동일한 출력 사용 및 복사글렌 잭맨(Glenn Jackman)이 그의 대답에서 그랬습니다.:

$ awk -v OFS=':' '{ name=$0; getline sname; getline state;
                    print name,sname,state }' <input.file >output.file

-v OFS=':'("출력 필드 구분자")를 OFS콜론으로 설정합니다. getline의 함수는 awk(지정된 변수로) 다음 줄을 읽고 print주어진 필드로 구분된 레코드를 인쇄합니다 OFS.

답변3

GNU 사용 sed:

sed '1~3{N;N;s/\n/:/g}' < input.file > output.file

작동 방식:

1~3        # match every 3rd line, starting with the 1st
{    
  N;N;     # append the next 2 lines of input into the pattern space
  s/\n/:/g # replace newlines with your chosen separator
}

답변4

사용 xargs,

xargs -d'\n' -n3 < file somecommand

3개의 줄바꿈으로 구분된 값을 가져와 file인수로 전달합니다.somecommand

전임자. 사용 printf:

$ xargs -d'\n' -n3 < file printf '"%s","%s","%s"\n'
"Name1","School Name1","State1"
"Name2","School Name2","State2"
"Name3","School Name3","State3"

관련 정보