다음 순서로 세부 정보가 포함된 파일이 있습니다.
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"