คำถามติดแท็ก awk

รูปแบบการสแกนและการประมวลผลภาษา

7
จะประมวลผลไฟล์ข้อความแบบหลายคอลัมน์เพื่อรับไฟล์ข้อความแบบหลายคอลัมน์ได้อย่างไร
ฉันมีไฟล์ข้อความ: a aa aaa b bb bbb c cc ccc d dd ddd e ee eee f ff fff g gg ggg h hh hhh i ii iii j jj jjj ฉันจะประมวลผลและรับไฟล์คอลัมน์ 2 แบบนี้ได้อย่างไร: a aa aaa b bb bbb c cc ccc d dd ddd e ee eee f …

3
การเพิ่มคอลัมน์ของค่าในไฟล์ที่คั่นด้วยแท็บ
ฉันจะเพิ่มคอลัมน์ของค่าในไฟล์ที่มีจำนวนแถวที่แน่นอนได้อย่างไร ฉันมีไฟล์อินพุตดังนี้: ไฟล์อินพุต: SPATA17 1 217947738 LYPLAL1 1 219383905 FAM47E 4 77192838 SHROOM3 4 77660162 SHROOM3 4 77660731 SHROOM3 4 77662248 ไฟล์ที่ส่งออก: SPATA17 1 217947738 file1 LYPLAL1 1 219383905 file1 FAM47E 4 77192838 file1 SHROOM3 4 77660162 file1 SHROOM3 4 77660731 file1 SHROOM3 4 77662248 file1 ในกรณีนี้ฉันต้องการเพิ่มคอลัมน์ของค่าจนถึงจำนวนแถวในไฟล์ค่ายังคงสอดคล้องเช่น "file1" เหตุผลคือฉันมี 100 …

1
ลบบรรทัดที่ค่าของฟิลด์น้อยกว่าหรือเท่ากับ 3 - sed หรือ awk?
ฉันต้องการลบทุกบรรทัดที่มีค่า 2 หรือน้อยกว่าในฟิลด์ที่ 8 (คอลัมน์) ข้อมูลของฉันมีลักษณะเช่นนี้: 12-31 Airport 189 379 41 49.70946503 -124.91377258 2 2880 30.8 01-01 AlberniElementary 165 331 16 49.26100922 -124.80662537 4 5760 26.1 01-09 BamfieldMarine 161 323 23 48.83490372 -125.13572693 2 2875 27.4 01-10 BamfieldMarine 161 323 23 48.83490372 -125.13572693 3 3068 38.6 ฉันเข้าใจว่าการใช้ awk ฉันสามารถตัดค่าที่ต้องการและพิมพ์ไปยังไฟล์อื่นและฉันเข้าใจว่า sed …
17 shell  shell-script  sed  awk  grep 

7
ทำซ้ำแต่ละบรรทัดหลายครั้ง
ต้องการให้แต่ละบรรทัดในไฟล์ซ้ำกันหลายครั้ง เช่นให้แต่ละบรรทัดทำซ้ำสี่ครั้ง: a b c กลายเป็น: a a a a b b b b c c c c ฉันได้ทำการค้นหาแล้วและมีคำถามและคำตอบมากมายในแนวของการย้อนกลับเช่นการรวมบรรทัดที่ซ้ำกันเป็นบรรทัดเดียว มันง่ายที่จะทำใน C แต่ฉันหวังว่าฉันจะรู้มากขึ้นเกี่ยวกับคำสั่งดั้งเดิมดังนั้นฉันจึงไม่ต้องหันไปใช้วิธีการโยนครั้งเดียวแบบนี้ตลอดเวลา

3
วิธีการจัดรูปแบบเลขทศนิยมด้วยเลข 2 ตัวที่สำคัญในการทุบตี?
ฉันต้องการพิมพ์เลขทศนิยมด้วยเลขนัยสำคัญสองตัวใน bash (อาจใช้เครื่องมือทั่วไปเช่น awk, bc, dc, perl และอื่น ๆ ) ตัวอย่าง: ควรพิมพ์ 76543 เป็น 76000 0.0076543 ควรพิมพ์เป็น 0.0076 ในทั้งสองกรณีตัวเลขที่สำคัญคือ 7 และ 6 ฉันได้อ่านคำตอบสำหรับปัญหาที่คล้ายกันเช่น: วิธีการปัดเลขทศนิยมในเปลือก? Bash จำกัดความแม่นยำของตัวแปร floating point แต่คำตอบจะเน้นที่การ จำกัด จำนวนตำแหน่งทศนิยม (เช่นbcคำสั่งด้วยscale=2หรือprintfคำสั่งด้วย%.2f) แทนตัวเลขที่มีนัยสำคัญ มีวิธีที่ง่ายในการจัดรูปแบบตัวเลขด้วยตัวเลข 2 ตัวที่สำคัญหรือฉันต้องเขียนฟังก์ชั่นของตัวเองหรือไม่?
17 bash  awk  bc  floating-point  dc 

5
ใช้ grep vs awk
เพื่อจับภาพรูปแบบเฉพาะawkและgrepสามารถนำมาใช้ ทำไมเราควรใช้อันอื่น เร็วกว่าไหนและเพราะอะไร ถ้าฉันมีล็อกไฟล์และฉันต้องการคว้ารูปแบบบางอย่างฉันสามารถทำอย่างใดอย่างหนึ่งต่อไปนี้ awk '/pattern/' /var/log/messages หรือ grep 'pattern' /var/log/messages ฉันยังไม่ได้ทำการเปรียบเทียบดังนั้นฉันไม่รู้เลย ใครบางคนสามารถอธิบายรายละเอียดนี้ เป็นเรื่องดีที่ได้ทราบการทำงานภายในของเครื่องมือทั้งสองนี้
17 linux  awk  grep  performance 

3
แทนที่สตริงหลายบรรทัดในไฟล์
ฉันมีไฟล์จำนวนหนึ่งที่ฉันต้องการอัปเดตโดยแทนที่สตริงหลายบรรทัดหนึ่งด้วยสตริงอื่นหลายบรรทัด บางสิ่งบางอย่างตาม: * Some text, * something else * another thing และฉันต้องการแทนที่ด้วย: * This is completely * different text ผลที่ตามมาก็คือหลังจากการแทนที่ไฟล์ที่มีบล็อกแรกของข้อความตอนนี้จะมีสตริงที่สอง (ส่วนที่เหลือของไฟล์ไม่เปลี่ยนแปลง) ส่วนหนึ่งของปัญหาคือฉันต้องค้นหารายชื่อไฟล์ที่จะอัพเดทในระบบไฟล์ ฉันเดาว่าฉันสามารถใช้ grep สำหรับสิ่งนั้นได้ (แม้ว่าจะไม่ใช่เรื่องง่ายที่จะทำกับสตริงหลายบรรทัด) จากนั้นลองใช้ greid หรือไม่? มีวิธีง่าย ๆ ในการทำเช่นนี้? Sed เป็นตัวเลือก แต่มันน่าอึดอัดใจเพราะฉันต้องเพิ่ม \ n ฯลฯ มีวิธีที่จะพูดว่า "รับอินพุตจากไฟล์นี้จับคู่กับไฟล์เหล่านั้นจากนั้นแทนที่ด้วยเนื้อหาของไฟล์อื่นนี้" หรือไม่? ฉันสามารถใช้ python ถ้าจำเป็น แต่ฉันต้องการบางสิ่งที่รวดเร็วและง่ายดายดังนั้นหากมียูทิลิตีที่มีอยู่ฉันอยากจะใช้สิ่งนั้นมากกว่าเขียนสคริปต์ของตัวเอง (ซึ่งฉันรู้วิธีการทำ)

3
นับค่าที่แตกต่างของฟิลด์ในไฟล์
ฉันมีไฟล์มีจำนวนบรรทัดมากกว่าล้านบรรทัด ในบรรทัดฉันมีเขตข้อมูลที่เรียกว่าtransactionidซึ่งมีค่าซ้ำ สิ่งที่ฉันต้องทำคือนับพวกเขาอย่างชัดเจน ไม่ว่าจะมีค่าซ้ำกี่ครั้งก็ควรนับเพียงครั้งเดียว

1
โหมด Slurp ใน awk?
เครื่องมือชอบsed, awkหรือperl -nดำเนินการอย่างใดอย่างหนึ่งใส่ของพวกเขาบันทึกในเวลาที่บันทึกเป็นเส้นโดยค่าเริ่มต้น บางอย่างเช่นawkกับRSแอฟริกาsedด้วย-zหรือperlกับ-0oooสามารถเปลี่ยนชนิดของการบันทึกโดยการเลือกตัวคั่นบันทึกที่แตกต่างกัน perl -nสามารถสร้างอินพุตทั้งหมด (แต่ละไฟล์เมื่อผ่านหลายไฟล์) เป็นเรคคอร์ดเดียวพร้อม-0777ตัวเลือก (หรือ-0ตามด้วยหมายเลขฐานแปดที่มากกว่า 0377, 777 เป็นแบบบัญญัติ) ว่าสิ่งที่พวกเขาเรียกว่าโหมด Slurp สิ่งที่คล้ายกันสามารถทำได้ด้วยawk' RSหรือกลไกอื่น ๆ ? ที่ไหนawkประมวลผลแต่ละไฟล์เนื้อหาโดยรวมในการสั่งซื้อเมื่อเทียบกับแต่ละบรรทัดของแต่ละไฟล์?
16 awk 

10
ฉันจะรวมตัวเลขทั้งหมดในไฟล์ได้อย่างรวดเร็วได้อย่างไร
แต่ละบรรทัดประกอบด้วยข้อความและตัวเลขในหนึ่งคอลัมน์ ฉันต้องคำนวณผลรวมของตัวเลขในแต่ละแถว ฉันจะทำสิ่งนั้นได้อย่างไร ขอบคุณ example.log ประกอบด้วย: time=31sec time=192sec time=18sec time=543sec คำตอบควรเป็น784

4
ค้นหาความยาวของบรรทัดที่ยาวที่สุดในไฟล์ข้อความทั้งหมดในไดเรกทอรี
ฉันรู้วิธีรับความยาวของบรรทัดที่ยาวที่สุดในไฟล์ข้อความด้วย awk awk ' { if ( length > L ) { L=length} }END{ print L}' file.txt แต่ฉันจะรับความยาวของบรรทัดที่ยาวที่สุดของไฟล์ทั้งหมดในไดเรกทอรีได้อย่างไร?
16 awk 

5
แยกค่าระหว่างเครื่องหมายคำพูดคู่
""แบบสอบถามของฉันคือการดึงค่าระหว่างคำพูดคู่ ตัวอย่างอินพุตคือ: 10.219.41.68 - - - [11 / Jun / 2014: 10: 23: 04 -0400] วินาที: 0 MicSec: 1797 "GET / balancer-manager HTTP / 1.1" 200 28980 "-" "ขด / 7.15.5 (i386 -redhat-linux-gnu) libcurl / 7.15.5 OpenSSL / 0.9.8b zlib / 1.2.3 libidn / 0.6.5 " ฉันมีล็อกไฟล์ขนาดใหญ่ดังนั้นค่าสามารถแตกต่างกันไปในแต่ละบรรทัดจำเป็นต้องแยกค่าระหว่างการเกิดขึ้นครั้งแรกของเครื่องหมายคำพูดคู่ ... ผลลัพธ์ที่คาดหวัง: GET …
16 awk 

2
พิมพ์บรรทัดระหว่าง (และรวมถึง) สองรูปแบบ
ฉันต้องการเริ่ม grepping จากบรรทัดที่มีCKที่ส่วนท้ายของบรรทัดและหยุดการ grepping เมื่อบรรทัดมีDที่สิ้นสุด ฉันพยายามgrep "$CK" "$D" file..txtแต่มันใช้งานไม่ได้ การป้อนข้อมูล: kkkkkkkkkkk jjjjjjjjjjjjjjjjjj gggggggggggg/CK JHGHHHHHHHH HJKHKKLKLLL JNBHBHJKJJLKKL JLKKKLLKJLKJ/D GGGGGGGGGGGGGG GGGGGGGGGGGGGG ผลลัพธ์ที่ต้องการ: gggggggggggg/CK JHGHHHHHHHH HJKHKKLKLLL JNBHBHJKJJLKKL JLKKKLLKJLKJ/D

3
กรองไฟล์. CSV ตามค่าคอลัมน์ที่ 5 ของไฟล์และพิมพ์บันทึกเหล่านั้นลงในไฟล์ใหม่
ฉันมีไฟล์. CSV ซึ่งมีรูปแบบด้านล่าง: "column 1","column 2","column 3","column 4","column 5","column 6","column 7","column 8","column 9","column 10 "12310","42324564756","a simple string with a , comma","string with or, without commas","string 1","USD","12","70%","08/01/2013","" "23455","12312255564","string, with, multiple, commas","string with or, without commas","string 2","USD","433","70%","07/15/2013","" "23525","74535243123","string , with commas, and - hypens and: semicolans","string with or, without commas","string 1","CAND","744","70%","05/06/2013","" "46476","15467534544","lengthy …
16 linux  sed  awk  csv  filter 

2
grep: แสดงชื่อไฟล์หนึ่งครั้งจากนั้นแสดงบริบทด้วยหมายเลขบรรทัด
ซอร์สโค้ดของเรามีรหัสข้อผิดพลาดกระจายอยู่ทั่วไป การค้นหามันเป็นเรื่องง่ายด้วย grep แต่ฉันต้องการฟังก์ชั่นทุบตีfind_codeที่ฉันสามารถดำเนินการ (เช่น. find_code ####) ซึ่งจะให้ผลลัพธ์ตามบรรทัดเหล่านี้: /home/user/path/to/source.c 85 imagine this is code 86 this is more code 87 { 88 nicely indented 89 errorCode = 1111 90 that's the line that matched! 91 ok this block is ending 92 } 93 } นี่คือสิ่งที่ฉันมีในปัจจุบัน: find_code() { # "= " …

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