텍스트 파일의 줄을 별도의 파일로 분할

텍스트 파일의 줄을 별도의 파일로 분할

다음과 같은 텍스트 파일이 있습니다.

foo
bar
zip
rar
tar

다음과 같이 각 줄마다 새 텍스트 파일을 생성하려면 OSX에서 bash 스크립트를 사용해야 합니다.

cat text1.txt
foo
cat text2.txt
bar
cat text3.txt
zip
cat text4.txt 
rar
cat text5.txt
tar

답변1

당신은 그것을 사용할 수 있습니다csplit. 출력 파일 이름 측면에서 약간 융통성이 없고(접미사가 아닌 접두사만 지정할 수 있음) 조각 수를 계산하려면 첫 번째 패스가 필요하다는 점을 제외하면 작업을 잘 수행합니다.

csplit -f text -- input.txt '//' "{$(wc -l input.txt)}"
for x in text[0-9]*; do mv -- "$x" "$x.txt"; done

GNU 버전(OSX 버전은 아님)에는 두 가지 문제를 모두 해결하는 확장 기능이 있습니다.

csplit -b '%d.txt' -f text -- input.txt '//' '{*}'

또는 csplit너무 유연하지 않은 경우 awk를 사용할 수 있습니다.

awk '{filename = sprintf("text%d.txt", NR); print >filename; close(filename)}' input.txt

답변2

순수 bash 버전...

unset i; while read -r l; do echo $l > "text$((++i)).txt";done < text_file.txt

답변3

텍스트 파일의 내용에 공백이 포함되어 있지 않다고 가정하면 Bash에서 for 루프를 사용할 수도 있습니다.

$ for x in $(<file.txt); do echo "$x" > text$((++i)).txt; done

$ cat file.txt 
foo
bar
zip
rar
tar

지금은 설정되지 않았습니다 $i.

$ unset i
$ for x in $(<file.txt);do echo "$x" > text$((++i)).txt;done
$ ls -l text*
-rw-rw-r--. 1 slm slm 4 Oct 29 22:03 text1.txt
-rw-rw-r--. 1 slm slm 4 Oct 29 22:03 text2.txt
-rw-rw-r--. 1 slm slm 4 Oct 29 22:03 text3.txt
-rw-rw-r--. 1 slm slm 4 Oct 29 22:03 text4.txt
-rw-rw-r--. 1 slm slm 4 Oct 29 22:03 text5.txt

결과 확인:

$ head text*
==> text1.txt <==
foo

==> text2.txt <==
bar

==> text3.txt <==
zip

==> text4.txt <==
rar

==> text5.txt <==
tar

관련 정보