NZParsed라는 폴더에 많은 파일 (수백만, 즉 약 2.5m) .txt 파일을 정렬하려고합니다.
폴더의 모든 파일 이름은 1.txt 2.txt와 같이 이름이 25xxxxx.txt까지 지정됩니다.
이클립스에서 다음 명령을 실행 한 후 :
os.system("sort -k1,1 -k3,3n -k4,4n -y 1048576 /home/viraj/NZ/NZParsed/* -o /home/viraj/NZ/SplitIndex/abcd.txt")
오류가 발생합니다.
sh: 1: sort: Argument list too long
누구든지이 모든 파일을 하나의 파일로 정렬하고 이클립스에서 다음 명령을 사용하여 분할 할 수있는 다른 방법을 말할 수 있습니까?
os.system("split -C 200m /home/viraj/NZ/SplitIndex/abcd.txt /home/viraj/NZ/SplitIndex/")
문제는 이클립스 또는 파이썬과 관련이 없습니다. ARG_MAX 한계에 도달하고 있습니다. 자세한 내용은 여기를 참조 하십시오. 그러나 간략히 이것은 명령에 대한 인수 목록이 될 수있는 바이트 수의 한계입니다.
따라서이를 방지 sort
하려면 파일을 나열하지 않는 방식으로해야합니다. 예를 들면 :
for i in /home/viraj/NZ/NZParsed/*; do cat "$i" ; done |
sort -k1,1 -k3,3n -k4,4n -y 1048576 > /home/viraj/NZ/SplitIndex/abcd.txt
위의 명령은 cat
각 파일을 수행 한 다음 sort
명령을 통해 모든 파일의 내용을 전달합니다 . 이렇게하면 파일이 나열되지 않고 ARG_MAX
문제가 발생 하지 않습니다 .
또 다른 접근 방식은 find의 -exec
옵션 을 사용하는 것입니다 .
find /home/viraj/NZ/NZParsed/ -type f -name '[0-9]*.txt' -exec cat {} + |
sort -k1,1 -k3,3n -k4,4n -y 1048576 > /home/viraj/NZ/SplitIndex/abcd.txt
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다