อ่าน/เขียน/ค้นหา/แทนที่ไฟล์ CSV ขนาดใหญ่

ฉันมีไฟล์ csv ขนาดใหญ่ (4,5 GB) .. ฉันต้องทำการตัดและวางขั้นพื้นฐาน แทนที่การดำเนินการสำหรับบางคอลัมน์ .. ข้อมูลได้รับการจัดระเบียบค่อนข้างดี .. ปัญหาเดียวคือฉันไม่สามารถเล่นกับมันด้วย Excel ได้เพราะ ของขนาด (2,000 แถว, 550,000 คอลัมน์)

นี่คือข้อมูลบางส่วน:

ID,Affection,Sex,DRB1_1,DRB1_2,SENum,SEStatus,AntiCCP,RFUW,rs3094315,rs12562034,rs3934834,rs9442372,rs3737728

D0024949,0,F,0101,0401,SS,yes,?,?,A_A,A_A,G_G,G_G
D0024302,0,F,0101,7,SN,yes,?,?,A_A,G_G,A_G,?_?
D0023151,0,F,0101,11,SN,yes,?,?,A_A,G_G,G_G,G_G

ฉันต้องลบคอลัมน์ที่ 4, 5, 6, 7, 8 และ 9 ฉันจำเป็นต้องค้นหาอักขระ _ ทุกตัวตั้งแต่คอลัมน์ 10 เป็นต้นไปและแทนที่ด้วยอักขระเว้นวรรค ( ) ฉันต้องเปลี่ยนทุก ๆ ? ด้วยศูนย์ (0); ฉันต้องแทนที่ลูกน้ำทุกตัวด้วยแท็บ ฉันต้องลบแถวแรก (ที่มีชื่อคอลัมน์ ฉันต้องแทนที่ทุกๆ 0 ด้วย 1, ทุก ๆ 1 ด้วย 2 และทุกๆ ? ด้วย 0 ในคอลัมน์ที่ 2; ฉันต้องแทนที่ F ด้วย 2, M ด้วย 1 และ ? ด้วย 0 ใน คอลัมน์ที่ 3;

ดังนั้นในไฟล์ผลลัพธ์เอาต์พุตจะอ่านว่า:

D0024949 1 2 A A A A G G G G

D0024302 1 2 A A G G A G 0 0

D0023151 1 2 A A G G G G G G

(ทั้งอินพุตและเอาต์พุตควรอ่านหนึ่งบรรทัดต่อแถว ไม่มีแถวว่างเพิ่มเติม) มีวิธีหน่วยความจำที่มีประสิทธิภาพในการทำเช่นนั้นด้วย java (และฉันต้องการรหัสในการทำเช่นนั้น) หรือเครื่องมือที่ใช้งานได้สำหรับเล่นกับข้อมูลขนาดใหญ่นี้หรือไม่ ฉันสามารถใช้ฟังก์ชัน Excel ได้อย่างง่ายดาย..


person notapipe    schedule 02.06.2010    source แหล่งที่มา
comment
คุณอาจลองใช้เครื่องมือเช่น sed และ awk   -  person miku    schedule 02.06.2010
comment
ทำไมไม่เพียงแค่อ่านแถวข้อมูล แยกวิเคราะห์แบบคั่นด้วยเครื่องหมายจุลภาค ดำเนินการตามต้องการ เขียนบรรทัดใหม่ที่คั่นด้วยเครื่องหมายจุลภาคลงในไฟล์ใหม่ กลับไปที่ขั้นตอนที่ 1 หากข้อมูลของคุณสะอาดแล้ว คุณก็สามารถแบ่งบรรทัดบนเครื่องหมายจุลภาคได้เลย หรือแยกวิเคราะห์ด้วยกฎ csv พื้นฐานหรือแม้แต่ regex ก็อาจใช้งานได้ ฉันไม่เห็นว่ามีอะไรยากขนาดนั้น?   -  person    schedule 02.06.2010


คำตอบ (1)


คุณต้องการสองสิ่ง:
- ความรู้เกี่ยวกับนิพจน์ทั่วไป (หรือที่เรียกว่า Regex, Regexes)
- PowerGrep

person PeterM    schedule 02.06.2010