텍스트 파일을 확장하는 방법:
원본 텍스트 파일:
1
2
3
4
5
etc
원하는 확장 결과:
1
2
3
4
5
2
3
4
5
6
3
4
5
6
7
etc.
즉, 파일 1의 처음 5개 라인을 새로운 확장 파일 2에 나열한 다음 n+1에서 시작하여 5의 두 번째 블록을 추가하고 n+2에서 시작하는 세 번째 블록을 추가하는 식으로 파일 1의 끝까지 계속합니다.
답변1
이 줄을 한 번만 실행하세요.
awk 'NR>5{printf"%s",out;sub("^[^\n]+\n","",out)}{out=out$0"\n"}END{printf "%s",out}' file
물론
file
파일 이름으로 바꾸십시오.awk
입력을 한 줄씩 처리하고 그에 대해 "작동"하는 프로그램입니다.out=out$0\n
변수를 만들고out
현재 줄을 변수에 추가한 다음 개행 문자를 추가합니다.NR>5{...}
이는 "행 5보다 큰 레코드(예: 행)에 대해 중괄호 안의 작업을 수행합니다.printf "%s", out
변수를 인쇄합니다out
.sub("^[^\n]+\n","",out)
out
여기서는 첫 번째 개행 문자의 시작 부분까지 빈 문자열로 바꾸는 삭제 명령으로 사용되는 대체 명령입니다.출력을 두 번째 파일에 저장하려면
file2
줄 끝에 ""> file2"를 추가하세요.
고쳐 쓰다:
또 다른 도구가 존재합니다 sed
.스트림 편집기, 이는 더 짧지만 더 비밀스러운 솔루션을 제공합니다.
sed -n '6,${x;p;s/^[^\n]\+\n//;x};H;1h;${x;p}' file
1h
"예약된" 공간에 첫 번째 행을 배치합니다.H
예약된 공간에 행을 추가합니다.6,${x;p;s/^[^\n]\+\n//;x}
, 6번째 줄부터 시작하여 예약된 공간을 현재 줄과 바꾸고 이를 인쇄한 다음 첫 번째 줄을 삭제하고 결과를 다시 예약된 공간으로 보냅니다.${x;p}는 처리가 끝나면 예약된 공간(아마도 an
g
대신 ax
)을 다시 가져와서 인쇄합니다.
답변2
# get number of lines in the file
n=$( wc -l <file )
# extend the file
awk -v n="$n" 'NR <= n { print $1+1 >>FILENAME }' file
이 두 명령을 필요한 만큼 여러 번 실행하세요.
프로그램 awk
은 읽고 있는 동일한 파일에 해당 행을 추가합니다. 추가되는 데이터는 기존 숫자에 1을 더한 것입니다.
파일의 줄 수로 제한하지 않으면( 를 사용하여 NR <= n
) 파티션을 채울 때까지 무한히 커집니다.
답변3
주어진 input
파일 seq 10 > input
:
1
2
3
4
5
6
7
8
9
10
다음은 파일의 행을 반복하여 5개의 각 블록을 인쇄합니다.
n=$(wc -l < input)
for((i=1; i <= n-4; i++)); do sed -n "$i,$((i+4))p" < input; done
다음으로 이어진다:
1
2
3
4
5
2
3
4
5
6
3
4
5
6
7
4
5
6
7
8
5
6
7
8
9
6
7
8
9
10