[unix] stdout을 분할하여 여러 출력 파일로 이동하는 방법은 무엇입니까?

commandstdout에 많은 수의 행을 인쇄 하는 명령 이 있다고 가정 해보십시오.

line1
line2
.....
lineN

출력을 디스크에 저장하려고하지만 단일 파일이 아니라 각각 1000 줄의 stdout을 갖는 일련의 파일로 저장하려고합니다.

file0001.txt:
-------------
line1
....
line1000

file0002.txt:
-------------
line1001
....
line2000

etc

나는 대답을 구글하려고 시도했지만 구글이 나를 tee명령 할 때 마다이 상황에서는 쓸모가 없다. 아마 잘못된 쿼리를 입력하고 있습니다.



답변

파일 저장을 마친 후에는 항상 줄 수에 split따라 파일을 여러 개의 파일 또는 여러 개의 파일로 만들 수 있습니다.

split -l 1000 output_file

또는 더 나은 시도

command | split -l 1000 -

이것은 출력 스트림을 1000 줄마다 파일로 분할합니다 (기본값은 -l 옵션이없는 1000 줄).

아래 명령을 사용하면 출력을 생성하고 파일에 저장하기 위해 분할 할 때 생성되는 파일 이름에 접두사를 추가하거나 적용 할 수있는 추가 유연성이 제공됩니다.

command | split -l 1000 - small-


답변

bash 스크립트를 사용할 수 있습니다 lines.bash

#!/bin/bash
a=0
while IFS='' read -r line
do
  printf -v filename "%04d.txt" "$((a++/1000))"
  echo "$line" >> $filename
done

그것을 다음과 같이 사용하십시오 :

cat long_file.txt | bash lines.bash

내가 발견 한 유일한 문제는 *로그인과 관련된 것입니다 long_file.txt(누군가 수정할 수 있음).


답변