คำถามติดแท็ก text-processing

การจัดการหรือตรวจสอบข้อความโดยโปรแกรมสคริปต์ ฯลฯ

4
คู่ผลรวมของคอลัมน์ตามเขตข้อมูลที่ตรงกัน
ฉันมีไฟล์ขนาดใหญ่ในรูปแบบต่อไปนี้: 2 1019 0 12 2 1019 3 0 2 1021 0 2 2 1021 2 0 2 1022 4 5 2 1030 0 1 2 1030 5 0 2 1031 4 4 หากค่าในคอลัมน์ 2ตรงกันฉันต้องการรวมผลรวมในคอลัมน์ 3และ4ของทั้งสองบรรทัดหรือจะรวมเพียงผลรวมของค่าในบรรทัดที่ไม่ซ้ำกัน ดังนั้นผลลัพธ์ที่ฉันหวังไว้จะเป็นดังนี้: 2 1019 15 2 1021 4 2 1022 9 2 1030 6 2 …

9
ฉันจะพิมพ์หมายเลขที่ยาวที่สุดในสตริงได้อย่างไร
ฉันกำลังมองหาวิธีการพิมพ์จำนวนที่ยาวที่สุดในสตริง เช่น: ถ้าฉันมีสตริง 212334123434test233 ฉันจะพิมพ์ได้อย่างไร 212334123434 ? หมายเหตุ: ฉันกำลังมองหาลำดับที่ต่อเนื่องยาวนานที่สุดของตัวเลขไม่ใช่ค่าที่สูงกว่าเป็นตัวเลข แก้ไข:ขอบคุณสำหรับคำตอบทุกคน การตอบคำถามนี้ค่อนข้างท่วมท้น ฉันทำเครื่องหมายโพสต์ของ @ HaukeLaging เป็นคำตอบที่ยอมรับได้เพราะมันเหมาะกับกรณีของฉันเป็นอย่างดี แต่ฉันต้องการชี้ให้เห็นว่าคำตอบทั้งหมดนั้นใช้ได้อย่างเท่าเทียมกัน เป็นเรื่องที่ดีเสมอที่จะมีตัวเลือกต่าง ๆ เพื่อแก้ไขปัญหา

6
สคริปต์เพื่อแยกรายการที่เลือกจากไฟล์ bibtex
ฉันมีไฟล์ bibtex ขนาดใหญ่ที่มีหลายรายการที่แต่ละรายการมีโครงสร้างทั่วไป @ARTICLE{AuthorYear, item = {...}, item = {...}, item = {...}, etc } (ในบางกรณีARTICLEอาจเป็นคำอื่นเช่นBOOK) สิ่งที่ฉันต้องการจะทำคือเขียนสคริปต์ง่ายๆ (โดยเฉพาะอย่างยิ่งสคริปต์ shell) เพื่อแยกรายการที่มี AuthorYear ที่กำหนดและใส่ลงในไฟล์. ibib ใหม่ ฉันสามารถจินตนาการได้ว่าฉันสามารถจำประโยคแรกของรายการโดย AuthorYear และประโยคสุดท้ายด้วยการปิดครั้งเดียว}และอาจใช้sedเพื่อแยกรายการ แต่ฉันไม่รู้วิธีการทำสิ่งนี้อย่างแท้จริง มีคนบอกฉันได้ไหมว่าฉันจะทำสิ่งนี้ได้อย่างไร มันน่าจะเป็นอะไรซักอย่าง sed -n "/AuthorYear/,/\}/p" file.bib แต่นั่นจะหยุดเนื่องจากการปิด}ในรายการแรกของรายการจึงให้ผลลัพธ์นี้: @ARTICLE{AuthorYear, item = {...}, ดังนั้นฉันจึงจำเป็นต้องรู้ว่า}ตัวละครตัวนี้เป็นตัวเดียวในบรรทัดหรือไม่และมีเพียง 'sed' ที่จะหยุดอ่านเมื่อเป็นกรณีนี้

6
คำสั่งวางที่ดีกว่า
ฉันมีสองไฟล์ต่อไปนี้ (ฉันทับเส้นที่มีจุดเพื่อให้ทุกบรรทัดในไฟล์มีความกว้างเท่ากันและทำให้ file1 ตัวพิมพ์ใหญ่ทั้งหมดเพื่อให้ชัดเจนยิ่งขึ้น) contents of file1: ETIAM...... SED........ MAECENAS... DONEC...... SUSPENDISSE contents of file2 Lorem.... Proin.... Nunc..... Quisque.. Aenean... Nam...... Vivamus.. Curabitur Nullam... ขอให้สังเกตว่า file2 ยาวกว่า file1 เมื่อฉันเรียกใช้คำสั่งนี้: paste file1 file2 ฉันได้ผลลัพธ์นี้ ETIAM...... Lorem.... SED........ Proin.... MAECENAS... Nunc..... DONEC...... Quisque.. SUSPENDISSE Aenean... Nam...... Vivamus.. Curabitur Nullam... ฉันจะทำอย่างไรเพื่อให้ผลลัพธ์เป็นดังนี้ ETIAM...... Lorem.... …

3
ประมวลผลบรรทัดสุดท้ายก่อนโดยใช้ awk
ฉันมีไฟล์ข้อมูลที่ฉันต้องการทำให้เป็นมาตรฐานโดยใช้awkตามดาต้าพอยน์ล่าสุด ดังนั้นฉันต้องการเข้าถึงจุดข้อมูลสุดท้ายก่อนเพื่อทำให้ข้อมูลเป็นมาตรฐานและดำเนินการตามปกติ วิธีต่อไปนี้ใช้tacสองครั้งเพื่อทำงาน แต่อาจจะซับซ้อนกว่าที่จำเป็น $ cat file 0 5 1 2 2 3 3 4 $ tac file | awk 'NR==1{norm=$2} {print $1, $2/norm}' | tac 0 1.25 1 0.5 2 0.75 3 1 คำถามของฉันมีดังต่อไปนี้: เป็นไปได้หรือไม่ที่จะได้รับผลลัพธ์ข้างต้นโดยใช้ awk เท่านั้น ฉันคิดว่าคำตอบคือ "ไม่ awk สแกนไฟล์ทีละบรรทัด" แต่ฉันเปิดให้คำแนะนำสำหรับทางเลือก

12
เป็นวิธีที่ดีในการกรองไฟล์ข้อความเพื่อลบบรรทัดว่างอะไร
ฉันมีไฟล์. csv (สำหรับ mac) ที่มีบรรทัดว่างมากมายเช่น: "1", "2", "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum ","2","3","4" "1", "2", "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum …

4
ฉันจะค้นหาการทับซ้อนของสองสายในทุบตีได้อย่างไร [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Unix & Linux Stack Exchange ปิดให้บริการใน5 ปีที่ผ่านมา ฉันมีสองสาย เพื่อเป็นตัวอย่างพวกเขาตั้งไว้เช่นนี้: string1="test toast" string2="test test" สิ่งที่ฉันต้องการคือการค้นหาการทับซ้อนเริ่มต้นที่จุดเริ่มต้นของสตริง ด้วยการทับซ้อนฉันหมายถึงสตริง "test t" ในตัวอย่างข้างต้นของฉัน # I look for the command command "$string1" "$string2" # that outputs: "test t" หากสตริงเป็นstring1="atest toast"; string2="test test"พวกเขาจะต้องไม่ทับซ้อนกันตั้งแต่เริ่มต้นการตรวจสอบรูปแบบจุดเริ่มต้นและ "a" string1จุดเริ่มต้นของ

7
`คำสั่ง '
มีคำสั่งที่สามารถใช้เพื่อเน้น (กับสีข้อความตัวหนาหรือกลับ - / เบื้องหน้า) สายอักขระที่เฉพาะเจาะจงใน stdin ในขณะที่ผ่านสายทั้งหมดเพื่อ stdout? ฉันกำลังคิดที่จะสร้างมันแต่ฉันจะใช้มันถ้ามันมีอยู่แล้ว คุณสมบัติที่พึงประสงค์: สตริงเน้นที่แยกจากกันจะถูกเน้นด้วยวิธีที่แตกต่างกันโดยอัตโนมัติ ตัวอย่างเช่นสตริงแรกจะถูกเน้นด้วยสีแดงที่สองในสีเขียวที่สามในสีฟ้าโดยไม่มีการกำหนดค่าด้วยตนเอง ตรวจจับการสนับสนุนสีและย้อนกลับไปที่วิธีการเน้นตัวหนา / กลับ / / อื่น ๆ ที่มีอยู่ อนุญาตให้จับคู่ของนิพจน์ทั่วไปและสตริงตัวอักษร ทำสิ่งที่ฉลาดกว่าโดยเฉพาะถ้าการจับคู่ซ้อนทับกันเช่น "foobar" และ "barbar" ไม่มีการแก้ไขใด ๆ ระหว่าง stdin และ stdout ยกเว้นการเพิ่มรหัสสี

6
อ่านไฟล์ที่มุ่งเน้นบรรทัดซึ่งอาจไม่ลงท้ายด้วยการขึ้นบรรทัดใหม่
ฉันมีไฟล์ชื่อ/tmp/urlFileที่แต่ละบรรทัดแสดงถึง url ฉันพยายามอ่านจากไฟล์ดังต่อไปนี้: cat "/tmp/urlFile" | while read url do echo $url done หากบรรทัดสุดท้ายไม่ลงท้ายด้วยอักขระขึ้นบรรทัดใหม่บรรทัดนั้นจะไม่ถูกอ่าน ฉันสงสัยว่าทำไม เป็นไปได้ไหมที่จะอ่านทุกบรรทัดไม่ว่าจะจบลงด้วยการขึ้นบรรทัดใหม่หรือไม่?

2
sed - ใช้การเปลี่ยนแปลงในหลายไฟล์
ฉันมีหลายร้อยไฟล์ซึ่งมี " </foo:bar>" cc bb aa </foo:bar> dd xx vv ฉันต้องการเปลี่ยนพวกเขาทั้งหมดในครั้งเดียวเพื่อ cc bb aa </foo:bar> sed ทำงานได้ดีเมื่อฉันให้ชื่อไฟล์ที่แน่นอน sed -i "/ </ foo: bar> / q" 99999.txt แต่เมื่อฉันพยายามที่จะเปลี่ยนพวกเขาทั้งหมดในครั้งเดียวฉันไม่ได้รับผล sed -i "/<\/foo:bar>/q" *.txt

3
พิมพ์คอลัมน์ที่ขึ้นต้นด้วยสตริงที่ระบุ
ฉันมีไฟล์ที่มีลักษณะดังนี้: ID101 G T freq=.5 nonetype ANC=.1 addinfor ID102 A T freq=.3 ANC=.01 addinfor ID102 A T freq=.01 type=1 ALT=0.022 ANC=.02 addinfor อย่างที่คุณเห็นแต่ละบรรทัดมีจำนวนคอลัมน์แตกต่างกันเล็กน้อย ฉันต้องการคอลัมน์ 1 คอลัมน์ 2 คอลัมน์ 3 คอลัมน์ 4 และคอลัมน์ที่ขึ้นต้นด้วยANC= ผลลัพธ์ที่ต้องการ: ID101 G T freq=.5 ANC=.1 ID102 A T freq=.3 ANC=.01 ID102 A T freq=.01 ANC=.02 ฉันมักจะใช้คำสั่ง awk …

2
ใน vi / vim ฉันจะผนวกไฟล์อย่างไรแทนที่จะเขียนทับมัน?
:w <file>ฉันรู้ว่าฉันสามารถเขียนไปยังแฟ้มโดยเพียงแค่ทำ ฉันอยากรู้ว่าฉันจะเขียนลงไฟล์ได้อย่างไรโดยการต่อท้ายมันแทนที่จะเขียนทับมัน ตัวอย่างกรณีการใช้งาน: ฉันต้องการนำตัวอย่างบางส่วนออกจากไฟล์บันทึกเป็นไฟล์อื่น เพื่อให้บรรลุในวันนี้ฉันสามารถทำ: เปิดไฟล์บันทึก เลือกบางบรรทัดด้วย Shift+v เขียนเป็นไฟล์: :w /tmp/samples เลือกบรรทัดเพิ่มเติมด้วย Shift+v ต่อท้าย/tmp/samplesด้วย:w !cat - >> /foo/samples แต่น่าเสียดายที่ขั้นตอนที่ 5 เป็นเวลานานน่าเกลียดและข้อผิดพลาดง่าย (หายไป>ทำให้คุณสูญเสียข้อมูล) ฉันหวังว่า Vim มีสิ่งที่ดีกว่าที่นี่

8
แยกไฟล์ข้อความเป็นบรรทัดที่มีจำนวนคำคงที่
ที่เกี่ยวข้อง แต่ไม่มีคำตอบที่น่าพอใจ: ฉันจะแยกไฟล์ข้อความขนาดใหญ่เป็นชิ้น ๆ จำนวน 500 คำได้อย่างไร ฉันพยายามที่จะใช้ไฟล์ข้อความ ( http://mattmahoney.net/dc/text8.zip ) ด้วย> 10 ^ 7 คำทั้งหมดในบรรทัดเดียวและแยกเป็นบรรทัดด้วยคำที่ไม่มีคำแต่ละคำ วิธีการปัจจุบันของฉันใช้งานได้ แต่ค่อนข้างช้าและน่าเกลียด (ใช้เชลล์สคริปต์): i=0 for word in $(sed -e 's/\s\+/\n/g' input.txt) do echo -n "${word} " > output.txt let "i=i+1" if [ "$i" -eq "1000" ] then echo > output.txt let "i=0" fi done …

2
จะค้นหาข้อความในไฟล์โดยไม่สนใจบรรทัดใหม่ได้อย่างไร
ฉันต้องการค้นหาข้อความที่อาจแบ่งออกเป็นหลายบรรทัดในไฟล์ grep ที่จะละเว้นการแบ่งบรรทัดและส่งคืนช่วงการจับคู่ของบรรทัด เช่นฉันจะค้นหาis an example fileและคาดหวังว่าจะพบได้ในไฟล์ต่อไปนี้: นี่คือ ไฟล์ตัวอย่าง การไม่ขึ้นอยู่กับช่องว่างนำหน้าหรือตามหลังการละเว้นพื้นที่สีขาวทั้งหมดในรูปแบบทั้งหมดอาจดีที่สุด (โดยหลักการแล้วการปฏิบัติตามลำดับของพื้นที่สีขาวเป็นพื้นที่เดียว) ทางออกที่ไม่เหมาะอย่างหนึ่งคือtr '\n' ' ' | grepการจำแนกระหว่างการจับคู่และการจับคู่ที่ไม่ตรงกัน แต่ไม่แสดงการจับคู่หรือจัดการกับไฟล์ขนาดใหญ่ได้ดี

7
จะหาตำแหน่งของตัวละครโดยใช้ grep ได้อย่างไร?
ฉันต้องการระบุตำแหน่งของอักขระในสตริงโดยใช้คำสั่ง grep RAMSITALSKHMAN|1223333ตัวอย่างเช่นสตริง grep -n '[^a-zA-Z0-9\$\~\%\#\^]' ฉันจะค้นหาตำแหน่งของ|ในสตริงที่กำหนดได้อย่างไร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.