2017-04-26 1 views
1

저는 약 350.000 줄의 텍스트가있는 비교적 작은 파일이 많이 있습니다.여러 텍스트 파일을 결합하고 중복 줄을 제거하고 나머지 줄을 특정 길이의 여러 파일로 분할하는 방법은 무엇입니까?

파일 1 :

asdf 
wetwert 
ddghr 
vbnd 
... 
sdfre 

파일 2 : 예를 들어 당신이 파일 2의 3 행을 볼 수 있듯이

erye 
yren 
asdf 
jkdt 
... 
uory 

내가 원하는 파일 1. 라인 1의 중복 여러 파일에서 이러한 중복을 확인하고 제거 할 수있는 프로그램/Notepad ++ 플러그인.

다음 문제는 모든 목록을 1.000.000 라인의 큰 파일로 결합하려고합니다.

  • 648563 라인
  • 375924 라인
  • 487036 라인 내가 그들을이 파일을 초래할 할

:

  • 그래서, 예를 들어, 나는이 파일이 1.000.000 라인
  • 511.523 라인

그리고 마지막 두 파일은 고유 한 줄로 구성되어야합니다. 어떻게해야합니까? 이를 위해 일부 프로그램을 사용할 수 있습니까? 또는 여러 메모장 ++ 플러그인의 조합? GSplit은 1.536.243의 파일을 1.000.000 및 536.243 줄의 파일로 분할 할 수 있지만 충분하지 않으며 중복을 제거하지 못합니다.

필자 자신의 Notepad ++ 플러그인이나 프로그램을 만들고 싶습니다.하지만 어떻게 시작해야하는지 잘 모릅니다.

미리 감사드립니다.

+0

실제로 파일의 줄 번호입니까? 그렇다면 중복 검사를 위해 무시해야합니다. 출력물에 보존해야합니까? 선들의 순서를 보존해야합니까? – Pharaoh

+0

@Pharaoh 줄 번호는 파일의 일부가 아니며 줄 순서는 중요하지 않습니다. –

+0

모든 중복 항목을 제거 하시겠습니까? 아니면 둘 중 하나를 유지 하시겠습니까? – Toto

답변

1

메모장 ++에 대해 질문했으며 Windows를 사용 중입니다. 반면에, 필요한 경우 프로그램을 만들고 싶다고 말했으므로 주된 목표는 작업을 완료하는 것입니다.
이 답변은 유닉스 도구를 사용합니다 - Windows에서는 Cygwin으로 얻을 수 있습니다.

명령을 실행하려면 터미널/콘솔에 명령을 입력 (또는 붙여 넣기)해야합니다.

cat file1 file2 file3 | sort -u | split -l1000000 - outfile_ 

cat 파일을 읽고 에코합니다. 일반적으로 화면에는 표시되지만 파이프 |은 왼쪽으로 명령의 출력을 가져 와서 오른쪽 명령으로 파이프합니다.

sort이 분명히 정렬되고 스위치 -u은 중복 된 행을 제거하도록 알려줍니다.

출력은 스위치 -l1000000에 의해 1000000 라인 이후에 분할되도록 지시 된 split으로 파이프됩니다.- (주위에 공백이 있음)은 파일에서가 아니라 "표준 입력"에서 입력을 읽도록 지시합니다. 이 경우 출력은 sort -u입니다. 원하는 경우 마지막 단어 outfile_을 변경할 수 있습니다.

필기체처럼 작성하면 outfile_aa, outfile_ab 등의 파일이됩니다.이 명령의 마지막 단어로 수정할 수 있습니다. 당신이 디렉토리에있는 모든 파일을 가지고 있고, 다른 아무것도에없는 경우

, 대신 모든 파일을 나열하는 *를 사용할 수 있습니다

cat * | sort -u | split -l1000000 - outfile_ 

를 파일이 빈 줄 포함되어있을 경우에, 당신은 할 수 있습니다 그들을 제거합니다. 그렇지 않으면 정상에 분류됩니다 및 첫 번째 파일은 전체 1.000.000 값이 없습니다 :이 또한 공백 만 구성 선을 제거합니다

cat file1 file2 file3 | grep -v '^\s*$' | sort -u | split -l1000000 - outfile_ 

. grep 정규식을 사용하여 입력을 필터링합니다. -v은 필터를 반전시킵니다. 일반적으로 grep은 일치하는 행만 유지합니다. 이제는 일치하지 않는 행만 유지합니다. ^\s*$은 0 개 이상의 공백 문자 (공백이나 탭과 같은)로 구성되는 모든 줄과 일치합니다.

정기적으로이 작업을 수행해야 할 경우 세부 사항을 기억하지 않아도, 스크립트를 작성할 수 있습니다

#!/bin/sh 
cat * | sort -u | split -l1000000 - outfile_ 

저장이 (예를 combine.sh에 대한) 파일로와 것은

으로 실행
./combine.sh 
관련 문제