
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' '{*}'