1901;팔리면 1656;문Ȣ16;1648; 맙시다. 소1473;한 NJ13;변 댓글1012; 삭1228;Ȣ16;lj16;,148; ǥ12;-124;러운 1068; 1077;니다160;
Get-Content "./text.txt" | Group-Object | Where-Object { $_.Count -gt 1 } | Select -ExpandProperty Name
현1228; 내용1008; 1060;,144; 11460;1060; -149;1077;니다 (text.txt를 열Ǻ12;서 1473;복 라1064;1012; 체크후 표시해1469;니다)
굳1060; ps1 포맷1012; 안 Ǹ16;고, Python같1008;,152;/196; 처리해도 상관 없습니다 (아니면 달성 가능한 소프트를 소개해1452;셔도 .121;니다)
목표lj16; 2가1648;1077;니다 (.168;1473; Ȣ16;나 달성 가능Ȣ16;면 .121;니다)
1. 현1228; 구1312;면 싱글 스/112;드/196; 처리Ȣ16;다보니 수1;만 (현1228; 40만대1064;데 차후 더 늘Ǻ12;DŽ16; 수 1080;습니다) 라1064; 처리에 너무 오래 ,152;립니다
가능Ȣ16;다면 ǥ16;할해서 4~6스/112;드1221;도/196; 처리Ȣ16;고 dz10;습니다 (1204;체 라1064;1012; 카운터해서 필요한 스/112;드 숫1088;/196; 나눈후 시1089; 1648;1216;1012; 각각 그만큼 더해서 1648;1221;Ȣ16;면 .112;꺼같습니다)
2. 1652;척도 표시0143; 1060;Ǻ12;서 처리 기능1012; 추가Ȣ16;고 dz10;습니다
현1228; 구1312;면 완료까1648; 아무,163;도 안 뜨고, 1~-149;까1648; 처리1064;데 현1228; 처리1473;1064; 라1064;1032; 수치를 표시 + 실행시 시1089;과 -149;1012; 1077;/141;Ȣ16;면 해NJ17; 구간1012; 처리Ȣ16;고, 안 Ȣ16;면 처1020;~-149;까1648; 처리Ȣ16;,172; Ȣ16;고1088; 합니다
만1068; 1060;,172; 가능해1648;면 여러개 실행해서 라1064;1012; 1648;1221;해서 실행Ȣ16;면 멀티 스/112;드/196; 처리가 가능Ȣ16;므/196; 1번1060; 필요 없Ǻ12;1665;니다
결국 2가1648;라 1201;었1648;만, Ƽ17;극1201;1004;/196;lj16; 멀티 스/112;드/196; 처리Ȣ16;lj16;,172; 목표라 보시면 .121;니다 (싱글 스/112;드/196; 41.5만 라1064; 택스트 처리Ȣ16;니 -140;찍한 시간1060; ,152;립니다)
http://www.2cpu.co.kr/hardware_2014/44147
컴 케이스 작다고 불타거나 하지 않아요
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)
³ª»ÚÁö ¾Ê°Ô °á°ú¸¦ ¹ñ¾îÁֳ׿ä.