첫 번째 청크에 더 많은 줄이 포함된 청크로 파일을 분할합니다.

첫 번째 청크에 더 많은 줄이 포함된 청크로 파일을 분할합니다.

4100줄이 포함된 대용량 파일을 분리하려고 합니다. 6줄의 숫자를 파일로 구분하고, 다른 줄은 4줄의 숫자를 파일로 따라야 합니다. 다음 사항을 고려하십시오.

Bash 스크립트를 작성하는 방법은 무엇입니까?

답변1

당신은 시도 할 수 있습니다 awk:

awk '{if (NR>6){if ((NR-6)%4==1){++c}} else {c=1}};{print >"file"c".las"}' infile

설정 gnu및 비교적 최신 버전 사용split 접미사를 추가할 수 있습니다.다음과 같이 할 수도 있습니다.

{ printf %s\\n\\n; cat infile; } | split -d -l 4 --additional-suffix='.las' - file
( set ./*.las
sed '1d
s/\\/&&/g
2c\
1i\\
3s/$/\\/' "$1" | sed -f - -i "$2"
rm -f "$1" )

즉, 두 개의 빈 줄을 인쇄한 다음 파일을 인쇄하고 결합된 출력을 네 줄로 분할하고 원래 입력의 처음 두 줄을 sed두 번째 부분에 삽입하고(있는 경우 백슬래시를 이스케이프 처리한 후) 마지막으로 첫 번째 부분을 삭제합니다. . 하지만 이렇게 하면 블록 이름이 제로 패딩되므로 결국에는 file0001.las다음과 같은 결과가 발생한다는 점을 명심하세요 .

답변2

다음 명령은 파일이 네 번째 줄마다 분할된다고 가정하여 설명된 대로 분할됩니다. 출력 파일의 이름은 , 등 output00으로 지정됩니다. output01그런 다음 모든 output*파일의 이름을 바꾸고 .las접미사를 끝에 고정하고 필요한 경우 앞에 오는 0을 제거할 수 있습니다.

split -l4 -d ./input_file output

답변3

csplit -s -k -f file. inoutfile '/^/+6' '/^/+4' '{*}'

관련 정보