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

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

1
จะเรียงลำดับตัวเลขตามคอลัมน์สุดท้ายได้อย่างไร
ฉันมีข้อมูลนี้: sdkxyosl 1 safkls 2 asdf--asdfasxy_asd 5 dkd8k jasd 29 sdi44sw 43 asasd afsdfs 10 rklyasd 4 ฉันต้องการผลลัพธ์นี้: sdi44sw 43 dkd8k jasd 29 asasd afsdfs 10 asdf--asdfasxy_asd 5 rklyasd 4 safkls 2 sdkxyosl 1 ดังนั้นฉันต้องเรียงลำดับบรรทัดตามคอลัมน์สุดท้าย ฉันไม่รู้ว่ามีกี่คอลัมน์ในหนึ่งบรรทัด ฉันคิดไม่ออกว่าจะทำยังไง ฉันไม่มี "พลัง Perl" ฉันมีพลังในการเขียนสคริปต์โดยเฉลี่ยด้วย sed, awk, cut เป็นต้น มีใครบางคนรู้วิธีที่จะทำ?

2
ท่อการไหลของข้อมูลในไปป์ไลน์เป็นอย่างไร
ฉันไม่เข้าใจว่าข้อมูลไหลในท่อและหวังว่าใครบางคนสามารถชี้แจงสิ่งที่เกิดขึ้นที่นั่น ฉันคิดว่าไพพ์ไลน์ของคำสั่งประมวลผลไฟล์ (ข้อความ, อาร์เรย์ของสตริง) ในลักษณะทีละบรรทัด (หากคำสั่งแต่ละคำสั่งใช้งานได้ทีละบรรทัด) แต่ละบรรทัดของข้อความจะผ่านไปป์ไลน์คำสั่งจะไม่รอให้การประมวลผลอินพุตทั้งหมดเสร็จสิ้นก่อนหน้า แต่ดูเหมือนว่ามันจะไม่เป็นเช่นนั้น นี่คือตัวอย่างการทดสอบ มีข้อความบางบรรทัด ฉันพิมพ์ใหญ่และทำซ้ำแต่ละบรรทัดสองครั้ง cat text | tr '[:lower:]' '[:upper:]' | sed 'p'ผมทำด้วย ที่จะปฏิบัติตามกระบวนการที่เราสามารถเรียกมันว่า "การโต้ตอบ" - catข้ามชื่อไฟล์การป้อนข้อมูลใน แต่ละส่วนของไปป์ไลน์ทำงานทีละบรรทัด: $ cat | tr '[:lower:]' '[:upper:]' alkjsd ALKJSD sdkj SDKJ $ cat | sed 'p' line1 line1 line1 line 2 line 2 line 2 แต่ไปป์ไลน์ที่สมบูรณ์รอให้ฉันเสร็จสิ้นอินพุตด้วยEOFและจากนั้นพิมพ์ผลลัพธ์: …

17
วิธีค้นหาบรรทัดที่มีอักขระน้อยที่สุด
ฉันกำลังเขียนเชลล์สคริปต์โดยใช้คำสั่ง UNIX ทั่วไป ฉันต้องดึงสายที่มีตัวอักษรน้อยที่สุด (รวมช่องว่าง) สามารถมีได้สูงสุดประมาณ 20 บรรทัด ฉันรู้ว่าฉันสามารถใช้head -$L | tail -1 | wc -mเพื่อค้นหาจำนวนตัวอักษรของบรรทัด L ปัญหาคือวิธีเดียวที่ฉันสามารถคิดได้โดยใช้สิ่งนั้นคือการเขียนคำสั่งที่ยุ่งเหยิงหากเปรียบเทียบกับค่าต่างๆ ข้อมูลตัวอย่าง: seven/7 4for 8 eight? five! จะกลับมา4forเนื่องจากบรรทัดนั้นมีอักขระน้อยที่สุด ในกรณีของฉันหากหลายบรรทัดมีความยาวสั้นที่สุดควรจะคืนค่าหนึ่งบรรทัด ไม่สำคัญว่าจะเลือกรายการใดตราบใดที่มีความยาวต่ำสุด แต่ฉันไม่เห็นอันตรายในการแสดงทั้งสองวิธีสำหรับผู้ใช้รายอื่นที่มีสถานการณ์อื่น

1
เรียงลำดับข้อมูลจากมากไปหาน้อยของคอลัมน์แรกสำหรับค่าเท่ากันให้ใช้คอลัมน์ที่สองในลำดับจากน้อยไปหามาก
อนุญาตให้ฉันชี้แจง: สมมติว่าฉันมีคำหลักบางคำที่มีความถี่ในการใช้งาน: 12 Hi 7 Hash 7 C++ 9 Superuser 17 Stackoverflow 9 LaTeX 42 Life 9 Ubuntu สิ่งที่ฉันต้องการคือการจัดเรียงข้อมูลตามความถี่ในการเรียงลำดับจากมากไปน้อยและหากมีค่าเท่ากันควรใช้คอลัมน์ที่สองตามลำดับจากน้อยไปหามาก sort -n -r foo.txt ทำส่วนแรก แต่คอลัมน์ที่สองก็เป็นเช่นreversedกัน: 42 Life 17 Stackoverflow 12 Hi 9 Ubuntu 9 Superuser 9 LaTeX 7 Hash 7 C++ ฉันจะบรรลุผลลัพธ์ต่อไปนี้ได้อย่างไร 42 Life 17 Stackoverflow 12 Hi 9 LaTeX …

6
แปลงระหว่าง Unicode Normalization Forms บนบรรทัดคำสั่ง unix
ใน Unicode ชุดอักขระบางตัวมีการแสดงมากกว่าหนึ่งรายการ ตัวอย่างเช่นอักขระäสามารถแสดงเป็น "ä" นั่นคือ codepoint U + 00E4 (สองไบต์c3 a4ในการเข้ารหัส UTF-8) หรือ "ä" นั่นคือ codepoints สองตัวคือ U + 0061 U + 0308 (สามไบต์61 cc 88ใน UTF-8) ตามมาตรฐาน Unicode ทั้งสองเป็นตัวแทนเทียบเท่า แต่ในการที่แตกต่างกัน "รูปแบบการฟื้นฟู" ดูUAX # 15: รูปแบบ กล่องเครื่องมือยูนิกซ์มีเครื่องมือการแปลงข้อความทุกชนิด, sed , tr , iconv , Perl เป็นที่จดจำ ฉันจะทำการแปลง NF อย่างรวดเร็วและง่ายดายบนบรรทัดรับคำสั่งได้อย่างไร

4
sed - แทนที่สตริงด้วยเนื้อหาไฟล์
ฉันมีสองไฟล์: และfile1file2 file1 มีเนื้อหาดังต่อไปนี้: --- host: "localhost" port: 3000 reporter_type: "zookeeper" zk_hosts: - "localhost:2181" file2มีที่อยู่ IP ( 1.1.1.1) สิ่งที่ฉันต้องการจะทำคือแทนที่localhostด้วย1.1.1.1ผลลัพธ์ก็คือ: --- host: "1.1.1.1" port: 3000 reporter_type: "zookeeper" zk_hosts: - "1.1.1.1:2181" ฉันเหนื่อย: sed -i -e "/localhost/r file2" -e "/localhost/d" file1 sed '/localhost/r file2' file1 |sed '/localhost/d' sed -e '/localhost/r file2' -e "s///" …

4
เป็นไปได้ในทุบตีเพื่อเริ่มอ่านไฟล์จากการนับไบต์ arbitary นับ?
ฉันต้องการค้นหาวันที่ซึ่งอยู่ในบันทึก 8 GB (ข้อความ) ฉันสามารถข้ามการอ่านตามลำดับแบบเต็มได้หรือไม่และทำการแยกไบนารีของไฟล์ (ขนาด) หรือทำการสำรวจระบบไฟล์inodes(ซึ่งฉันรู้น้อยมาก ) เพื่อเริ่มอ่านจากจุดแยกแต่ละจุดจนกว่าฉันจะหาออฟเซ็ตที่เหมาะสมจาก จะเริ่มค้นหาข้อความเพื่อหาบรรทัดที่กำหนดวันที่ได้ที่ไหน tailการอ่านบรรทัดสุดท้ายไม่ได้ใช้การอ่านตามลำดับปกติดังนั้นฉันจึงสงสัยว่าสถานที่นี้มีให้บริการอย่างใดอย่างหนึ่งในทุบตีหรือฉันจะต้องใช้ Python หรือ C / C ++ ... แต่ฉันสนใจเฉพาะตัวbashเลือก ..

7
การแข่งขันแบบไม่โลภกับ SED regex (เลียนแบบ perl's. *?)
ฉันต้องการใช้sedที่จะเปลี่ยนอะไรในสตริงระหว่างครั้งแรกABและครั้งแรกเกิดAC(รวม) XXXด้วย สำหรับตัวอย่างเช่นผมมีสายนี้ (สตริงนี้เหมาะสำหรับการทดสอบเท่านั้น): ssABteAstACABnnACss ssXXXABnnACssและฉันต้องการผลผลิตที่คล้ายกันนี้: ฉันทำสิ่งนี้กับperl: $ echo 'ssABteAstACABnnACss' | perl -pe 's/AB.*?AC/XXX/' ssXXXABnnACss sedแต่ฉันต้องการที่จะใช้มันกับ ต่อไปนี้ (ใช้ regex ที่เข้ากันได้กับ Perl) ไม่ทำงาน: $ echo 'ssABteAstACABnnACss' | sed -re 's/AB.*?AC/XXX/' ssXXXss

7
tail -f แต่มีหมายเลขบรรทัด
ฉันพยายามที่จะดูว่ามีกี่ครั้งที่foo barปรากฏขึ้น/var/log/foo.logภายในระยะเวลาโดยพลการบนเซิร์ฟเวอร์ระยะไกล แต่ไม่มีอะไรที่ฉันได้ลองมาแล้ว ฉันมีสคริปต์ตัวจับเวลาแล้วที่ฉันใช้เพื่อติดตามว่ามันได้รับมานานแค่ไหนตั้งแต่ฉันเริ่ม tailing /var/log/foo.logและตอนนี้ฉันก็อยากจะบอกว่ากี่ครั้งที่foo barปรากฏในเอาท์พุทเทลด์ ฉันค้นหา google แต่ฉันไม่พบสิ่งใดที่เกี่ยวข้องภายใน 10 หน้าแรกของผลลัพธ์ นี่คือสิ่งที่ฉันได้ลองด้วยผลลัพธ์ที่น่าผิดหวัง: ## works on local machine, but doesn't work as expected on remote tail -f /var/log/foo.log | grep foo\ bar | sed '=' ## works on local, but not remote tail -f /var/log/foo.log | grep foo\ bar | …

4
แยกสายยาวบนตัวคั่น
ฉันสามารถใช้คำสั่งใดเพื่อแบ่งอินพุตเช่นนี้: foo:bar:baz:quux ลงในนี้ foo bar baz quux ฉันพยายามหาcutคำสั่ง แต่ดูเหมือนว่าจะใช้ได้เฉพาะกับอินพุตจำนวนคงที่เท่านั้นเช่น "ตัวอักษร 1,000 ตัวแรก" หรือ "เขตข้อมูลแรก 7" ฉันต้องทำงานกับอินพุตที่มีความยาวโดยพลการ

6
สเปรดชีตที่เป็นมิตรของบรรทัดคำสั่ง
สิ่งนั้นมีอยู่จริงหรือไม่? สเปรดชีตแบบข้อความที่แสดงได้ดีในสภาพแวดล้อม CLI ฉันรู้ว่าฉันสามารถทำได้cat foobar.csvและทำตามที่ฉันต้องการ แต่มันไม่ได้เป็นประโยชน์หรือน่าสนใจโดยเฉพาะ ฉันไม่สามารถจินตนาการได้ว่ามันยากที่จะจัดรูปแบบตารางและอาจปฏิบัติตามกฎบางอย่าง (คณิตศาสตร์?) เช่นกัน Emacs มีการorg-modeจัดการตารางข้อความที่ค่อนข้างดีและช่วยให้การส่งออกไปยังหลายรูปแบบ อย่างไรก็ตามต้องใช้ Emacs! สิ่งใดในฐานะผู้ใช้ที่เป็นกลุ่มฉันต้องการหลีกเลี่ยง

4
วิธีลบส่วนที่เหลือของแต่ละบรรทัดหลังจากรูปแบบที่แน่นอนหรือสตริงในไฟล์?
สมมติว่าฉันมีรายการ URL ในไฟล์ข้อความ: google.com/funny unix.stackexchange.com/questions isuckatunix.com/ireallydo ฉันต้องการลบทุกอย่างที่เกิดขึ้นหลังจาก '.com' ผลลัพธ์ที่คาดหวัง: google.com unix.stackexchange.com isuckatunix.com ฉันเหนื่อย sed 's/.com*//' file.txt แต่มันก็ถูกลบ.comเช่นกัน

13
ฉันจะลบความคิดเห็นทั้งหมดจากไฟล์ได้อย่างไร
ฉันมีไฟล์ที่มีความคิดเห็น: foo bar stuff #Do not show this... morestuff evenmorestuff#Or this ฉันแค่ต้องการพิมพ์รหัสที่ไม่ใส่เครื่องหมายทั้งหมด: foo bar stuff morestuff evenmorestuff ความสามารถในการตัดความคิดเห็นออกจากไฟล์เป็นสิ่งสำคัญ ... วิธีการที่ดีคืออะไร

2
ค้นหาบรรทัดทั่วไประหว่างหลายไฟล์
ฉันมี 4 ไฟล์ซึ่งเป็นเหมือน file A >TCONS_00000867 >TCONS_00001442 >TCONS_00001447 >TCONS_00001528 >TCONS_00001529 >TCONS_00001668 >TCONS_00001921 file b >TCONS_00001528 >TCONS_00001529 >TCONS_00001668 >TCONS_00001921 >TCONS_00001922 >TCONS_00001924 file c >TCONS_00001529 >TCONS_00001668 >TCONS_00001921 >TCONS_00001922 >TCONS_00001924 >TCONS_00001956 >TCONS_00002048 file d >TCONS_00001922 >TCONS_00001924 >TCONS_00001956 >TCONS_00002048 ไฟล์ทั้งหมดมีมากกว่า 2000 บรรทัดและเรียงลำดับสำหรับคอลัมน์แรก ฉันต้องการค้นหาบรรทัดทั่วไปในไฟล์ทั้งหมด ฉันพยายาม awk และ grep และ comm แต่ไม่ทำงาน

1
แปลงบรรทัดใหม่เป็นตัวคั่น null เมื่อใช้ tail
ฉันจะเปลี่ยนผลลัพธ์จากtailการใช้บรรทัดที่สิ้นสุดด้วย null แทนการขึ้นบรรทัดใหม่ได้อย่างไร คำถามของฉันคล้ายกับคำถามนี้: จะทำอย่างไร "หัว" และ "หาง" บนอินพุตที่มีการคั่นด้วย null ในทุบตี? แต่สิ่งที่ฉันต้องการทำมีดังนี้: tail -f myFile.txt | xargs -i0 myCmd {} "arg1" "arg2" ฉันไม่ได้ใช้findและใช้ไม่ได้-print0 ทั้งหมดนี้เพื่อหลีกเลี่ยงข้อผิดพลาดที่เกิดขึ้นใน xargs: xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option

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