|
[필독] 처음 오시는 분을 위한 안내 (737) |
정은준1 |
2014-05 |
5244716 |
0 |
2014-05
5244716
1 정은준1
|
|
(광고) 단통법 시대의 인터넷가입 가이드(ver2.0) (234) |
백메가 |
2015-12 |
1770112 |
25 |
2015-12
1770112
1 백메가
|
104614 |
iodrive2 duo 2.4t 구매했는데요 드라이버랑 펌웨어같은거어디서받나요?? (5) |
행복하세 |
2020-02 |
2383 |
1 |
2020-02
2383
1 행복하세
|
104613 |
이게 밑판때기 같은데 (8) |
ocarina |
2019-12 |
2383 |
1 |
2019-12
2383
1 ocarina
|
104612 |
Intel SSD 420Series VS Gigabyte 240GB (1) |
비비BB |
2020-01 |
2383 |
0 |
2020-01
2383
1 비비BB
|
104611 |
os 호환안되는 메인보드 내장그래픽 해상도 변경 (13) |
malalari |
2022-05 |
2383 |
0 |
2022-05
2383
1 malalari
|
104610 |
R730 램 추가 관련 (7) |
seoulmetro |
2023-11 |
2383 |
0 |
2023-11
2383
1 seoulmetro
|
104609 |
스마트tv로 영화 보려고 하는데요 (8) |
하나비 |
2021-04 |
2383 |
0 |
2021-04
2383
1 하나비
|
104608 |
DELL T5820 / W-2150B 보다 더 빠른 시스템을 구성하고 싶습니다. 어떻게 해야할까요? (22) |
VSPress |
2023-04 |
2384 |
0 |
2023-04
2384
1 VSPress
|
104607 |
장터에 Dvi-i to Vga and Usb 2.0 젠더가 어디에 쓰는 걸까요? (5) |
진신두 |
2018-12 |
2384 |
0 |
2018-12
2384
1 진신두
|
104606 |
Dell precision 5510의 TPM2.0 업글방법은? (5) |
NiteFlite9 |
2024-03 |
2384 |
0 |
2024-03
2384
1 NiteFlite9
|
104605 |
스포츠 촬영 카메라 렌즈 구성 (7) |
류류류 |
2023-07 |
2384 |
0 |
2023-07
2384
1 류류류
|
104604 |
알리에서 파는 램 제조 쉽나요? (16) |
승리의샌디… |
2024-06 |
2384 |
0 |
2024-06
2384
1 승리의샌디…
|
104603 |
win10 파일 탐색기 열면 나오는 "네트워크 위치" 에 있는 Synology (8) |
죠슈아 |
2023-10 |
2384 |
0 |
2023-10
2384
1 죠슈아
|
104602 |
그래픽카드 금이빨? 이 떨어져 나간 제품에 대한 수리 여부 문의 드립니다. (8) |
신은왜 |
2024-04 |
2384 |
0 |
2024-04
2384
1 신은왜
|
104601 |
pc4 메모리 호환 여부 (3) |
김효수 |
2021-04 |
2384 |
0 |
2021-04
2384
1 김효수
|
104600 |
(비컴) 초등학생용 rc카 추천 부탁드립니다. (4) |
정의석 |
2023-02 |
2385 |
0 |
2023-02
2385
1 정의석
|
104599 |
FortiGate 310B 질문 (2) |
리드2cpu |
2021-11 |
2385 |
0 |
2021-11
2385
1 리드2cpu
|
104598 |
1Gbps 환경에서 utp 케이블을 광케이블로 바꾸었을때 이점이 있을까요? (9) |
5620SAM |
2024-03 |
2385 |
0 |
2024-03
2385
1 5620SAM
|
104597 |
오래된 보드 CMOS 세팅 지워짐 문제입니다. (11) |
돔이 |
2021-07 |
2385 |
0 |
2021-07
2385
1 돔이
|
104596 |
[질문] 3PAR OEM HGST DISK를 서버에 사용 가능 하게 만드는 방법(사례금 지급 예정) (2) |
라이크유 |
2021-07 |
2385 |
0 |
2021-07
2385
1 라이크유
|
104595 |
인텔 빅리틀은 리눅스에서 제대로 인식 못하나요? (5) |
이매망량2 |
2023-05 |
2385 |
0 |
2023-05
2385
1 이매망량2
|
GPT 질의)
Get-Content "./text.txt" | Group-Object | Where-Object { $_.Count -gt 1 } | Select -ExpandProperty Name
1. 전체 라인을 분할해서 4~6스레드정도로 처리 (전체 라인을 카운터해서 필요한 스레드 숫자로 나눈후 시작 지점을 각각 그만큼 더해서 지정)
2. 진척도 표시 및 일시중지 및 계속진행처리 기능 추가
GPT 답변 )
: 먼저, 전체 라인을 분할하여 여러 스레드에서 처리할 수 있도록 작업할 수 있습니다. 이를 위해서는 파일의 전체 라인 수를 세고, 그 수에 따라 적절한 수의 스레드로 분할합니다. 그런 다음, 각 스레드가 처리해야 할 라인 범위를 계산합니다.
#-----------------------------------------
# 파일의 전체 라인 수 계산
$totalLines = Get-Content "./text.txt" | Measure-Object -Line | Select-Object -ExpandProperty Lines
# 사용할 스레드 수 설정 (여기서는 예시로 4~6 사이의 스레드를 사용)
$threadCount = Get-Random -Minimum 4 -Maximum 7
# 각 스레드가 처리할 라인 범위 계산
$linesPerThread = [math]::Ceiling($totalLines / $threadCount)
# 각 스레드의 시작 지점 계산
$threadRanges = @()
$startLine = 1
for ($i = 1; $i -le $threadCount; $i++) {
$endLine = [math]::Min($startLine + $linesPerThread - 1, $totalLines)
$threadRanges += "$startLine-$endLine"
$startLine = $endLine + 1
}
#-----------------------------------------
이제 $threadRanges 배열에는 각 스레드가 처리해야 할 라인의 범위가 저장됩니다.
: 다음으로, 진척도 표시 및 일시중지/계속진행처리 기능을 추가할 수 있습니다. 이를 위해서는 각 스레드가 라인을 처리할 때마다 진행 상황을 표시하고, 필요한 경우 사용자 입력을 받아 작업을 일시 중지하거나 계속 진행합니다.
#-----------------------------------------
# 각 스레드에서 진행 상황을 표시하고 사용자 입력을 처리하는 함수 정의
function ProcessLines {
param (
[string]$range
)
$startLine, $endLine = $range -split '-'
for ($lineNumber = $startLine; $lineNumber -le $endLine; $lineNumber++) {
# 각 라인을 처리하는 작업 수행
# 여기에 실제 작업 내용을 추가
# 진행 상황 표시
Write-Host "Processing line $lineNumber/$totalLines"
# 사용자 입력 확인 (일시 중지 또는 계속 진행)
$key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown").Character
if ($key -eq 'p') {
# 'p' 키를 누르면 일시 중지
Write-Host "작업이 일시 중지되었습니다. 계속하려면 'c'를 입력하세요."
do {
$key = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown").Character
} while ($key -ne 'c')
Write-Host "작업을 계속합니다."
}
}
}
# 각 스레드마다 작업 시작
foreach ($range in $threadRanges) {
Start-ThreadJob -ScriptBlock {
param (
[string]$range
)
ProcessLines $range
} -ArgumentList $range
}
# 모든 스레드 작업이 완료될 때까지 대기
Get-Job | Wait-Job
# 모든 작업 완료 후 스레드 종료
Get-Job | Remove-Job
#-----------------------------------------
위의 예제에서는 각 스레드가 각 라인을 처리하는 가상의 작업을 수행하고, 그 과정에서 진행 상황을 표시하고 사용자 입력을 받습니다. 실제 작업에 맞게 스크립트를 수정하십시오.
Where-Object { $_.Count -gt 1 } 는 오히려 별 시간 안걸릴겁니다.
각 단계를 쪼개 변수에 넣고 실행을 하면 오래걸리는 병목이 어디인지 보일겁니다.
a = Get-Content "./text.txt"
b = a | Group-Object
...
import threading
class LineProcessor:
def __init__(self, filename):
self.filename = filename
self.lock = threading.Lock()
self.total_lines = 0
self.processed_lines = 0
self.duplicates = {}
def count_lines(self):
with open(self.filename, 'r') as file:
for line_number, line in enumerate(file, start=1):
self.total_lines += 1
def process_lines(self, start=None, end=None):
with open(self.filename, 'r') as file:
if start:
file.seek(start)
if end:
chunk_size = end - start
else:
chunk_size = os.path.getsize(self.filename)
for _ in range(chunk_size):
line = file.readline()
if not line:
break
self.processed_lines += 1
if line in self.duplicates:
with self.lock:
print(f"Duplicate line '{line.strip()}' found at line number(s): {', '.join(map(str, self.duplicates[line]))}")
else:
self.duplicates.setdefault(line, []).append(self.processed_lines)
def process_chunk(self, start, end):
self.process_lines(start, end)
with self.lock:
print(f"Processed chunk from {start} to {end}. Progress: {self.processed_lines}/{self.total_lines}")
def find_duplicates(filename, num_threads=4):
processor = LineProcessor(filename)
processor.count_lines()
chunk_size = processor.total_lines // num_threads
threads = []
for i in range(num_threads):
start = i * chunk_size
end = (i + 1) * chunk_size if i < num_threads - 1 else None
thread = threading.Thread(target=processor.process_chunk, args=(start, end))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
# print("Duplicate lines found:", processor.duplicates)
if __name__ == "__main__":
filename = "text.txt"
find_duplicates(filename)
나쁘지 않게 결과를 뱉어주네요.