csplit을 사용하여 정규식을 기반으로 파일을 여러 파일로 분할

csplit을 사용하여 정규식을 기반으로 파일을 여러 파일로 분할

다음 예제의 내용이 포함된 텍스트 파일이 있는데 이 파일을 여러 파일로 분할하고 싶습니다.

[TXT]   /path/to/[TXT]
[BAT]   /path/to/[BAT]
[TXT]   /path/to/blah/[TXT]
[BAT]   /path/to/blah/[BAT]

csplit그래서 나는 내가 달성하고 싶은 것을 적어도 부분적으로 달성하는 데 사용할 수 있다는 것을 발견했습니다 .

csplit -f 'paths-' -b '%04d.txt' 'path/to/filelist.txt' '/^\[(.*)]\t/' '{*}'

그러나 이것은 paths-0000.txt.

paths-txt.txt와 같은 것들이 더 많아졌으면 좋겠습니다 paths-bat.txt.

어쨌든 정규식을 접두사 일치와 일치시킬 수 있습니까?

-f 'paths-$1.txt'나는 과 같은 것을 시도했습니다 -f 'paths-\1.txt'.

그러나 이들 중 어느 것도 내가 원하는 대로 이루어지지 않았습니다.

답변1

csplit을 사용하는 것은 작업에 적합한 도구가 아닙니다.

나는 내가 원하는 것을 달성하기 위해 awk를 사용합니다.

awk -F"\t" '{print > $1".txt"}' /path/to/filelist.txt

제한하고 싶다면 분할 후 파일의 특정 부분만 보관할 수 있지만 모든 것이 필요하거나 필요합니다.

awk -F"\t" '{print $2 > $1".txt"}' /path/to/filelist.txt

관련 정보