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

AWK เป็นภาษาการเขียนโปรแกรมตีความตีความที่ออกแบบมาสำหรับการประมวลผลข้อความและโดยทั่วไปจะใช้เป็นเครื่องมือในการสกัดข้อมูลและการรายงาน AWK ส่วนใหญ่ใช้กับระบบ Unix

5
วิธีหลีกหนีคำพูดเดียวภายใน awk
ฉันต้องการทำสิ่งต่อไปนี้ awk 'BEGIN {FS=" ";} {printf "'%s' ", $1}' แต่การหลีกเลี่ยงคำพูดเดี่ยวด้วยวิธีนี้ไม่ได้ผล awk 'BEGIN {FS=" ";} {printf "\'%s\' ", $1}' ต้องทำอย่างไร? ขอบคุณที่ช่วยเหลือ.
111 awk 

24
ยังมีเหตุผลอะไรที่จะต้องเรียนรู้ AWK?
ฉันเรียนรู้เครื่องมือใหม่ ๆ อยู่ตลอดเวลาแม้แต่เครื่องมือเก่า ๆ เพราะฉันชอบใช้วิธีแก้ปัญหาที่เหมาะสม อย่างไรก็ตามฉันสงสัยว่ายังมีเหตุผลอะไรที่จะต้องเรียนรู้บางอย่าง awkตัวอย่างที่น่าสนใจกับผม แต่สำหรับการประมวลผลข้อความที่เรียบง่ายฉันจะสามารถใช้grep, cut, sedฯลฯ ในขณะที่สำหรับคนที่ซับซ้อนฉันจะไปสำหรับงูหลาม ตอนนี้ฉันไม่ได้หมายความว่านั่นไม่ใช่เครื่องมือที่ทรงพลังและมีประโยชน์ แต่เนื่องจากต้องใช้เวลาและแรงในการเรียนรู้เครื่องมือใหม่จึงคุ้มค่าหรือไม่?

6
ใช้ awk กับเงื่อนไขค่าคอลัมน์
ฉันกำลังเรียนรู้ awk จากThe AWK Programming Languageและฉันมีปัญหากับหนึ่งในตัวอย่าง ถ้าฉันต้องการพิมพ์ $ 3 ถ้า $ 2 เท่ากับค่า (เช่น1) ฉันใช้คำสั่งนี้ซึ่งใช้ได้ดี: awk '$2==1 {print $3}' <infile> | more แต่เมื่อฉันแทนที่ 1 ด้วยเกณฑ์การค้นหาอื่น (เช่นfindtext) คำสั่งไม่ทำงาน: awk '$1== findtext {print $3}' <infile> | more มันไม่ส่งคืนผลลัพธ์และฉันแน่ใจว่ามี 'findtext' อยู่ในไฟล์อินพุต ฉันลองสิ่งนี้ด้วย แต่ไม่ได้ผล: awk '$1== "findtext" {print $3}' <infile> | more นี่คือไฟล์ทดสอบของฉันชื่อ 'test' …
109 linux  shell  awk 

8
รับฟิลด์สุดท้ายโดยใช้ awk substr
ฉันพยายามใช้awkเพื่อรับชื่อไฟล์ที่กำหนดเส้นทางที่แน่นอนไปยังไฟล์ ตัวอย่างเช่นเมื่อกำหนดเส้นทางการป้อนข้อมูล/home/parent/child/filenameฉันต้องการให้filename ฉันได้ลอง: awk -F "/" '{print $5}' input ซึ่งทำงานได้อย่างสมบูรณ์แบบ อย่างไรก็ตามฉันเข้ารหัสยาก$5ซึ่งอาจไม่ถูกต้องหากข้อมูลของฉันมีโครงสร้างดังต่อไปนี้: /home/parent/child1/child2/filename ดังนั้นโซลูชันทั่วไปจึงต้องใช้ฟิลด์สุดท้ายเสมอ(ซึ่งจะเป็นชื่อไฟล์) มีวิธีง่ายๆในการทำสิ่งนี้กับฟังก์ชัน awk substr หรือไม่?
109 unix  awk  substr 

16
การพิมพ์ทุกอย่างยกเว้นฟิลด์แรกด้วย awk
ฉันมีไฟล์ที่มีลักษณะดังนี้: AE United Arab Emirates AG Antigua & Barbuda AN Netherlands Antilles AS American Samoa BA Bosnia and Herzegovina BF Burkina Faso BN Brunei Darussalam และฉันต้องการที่จะกลับคำสั่งพิมพ์ทุกอย่างก่อนยกเว้น $ 1 แล้ว $ 1: United Arab Emirates AE ฉันจะทำเคล็ดลับ "ทุกอย่างยกเว้นช่อง 1" ได้อย่างไร
108 perl  awk  sed 

6
sed หรือ awk: ลบ n บรรทัดตามรูปแบบ
ฉันจะผสมรูปแบบและช่วงตัวเลขใน sed (หรือเครื่องมือที่คล้ายกัน - awk เป็นต้น) ได้อย่างไร สิ่งที่ฉันต้องการทำคือจับคู่บางบรรทัดในไฟล์และลบ n บรรทัดถัดไปก่อนที่จะดำเนินการต่อและฉันต้องการทำเช่นนั้นเป็นส่วนหนึ่งของไปป์ไลน์
106 unix  sed  awk 


5
ใช้ awk เพื่อลบเครื่องหมายลำดับไบต์
วิธีจะawkสคริปต์ (สันนิษฐานหนึ่งซับ) ถอดBOMมีลักษณะเหมือน? ข้อมูลจำเพาะ: พิมพ์ทุกบรรทัดหลังจากแรก ( NR > 1) สำหรับบรรทัดแรก: หากขึ้นต้นด้วย#FE #FFหรือ#FF #FEให้ลบออกและพิมพ์ส่วนที่เหลือ

11
จะใช้ sed, awk หรือ gawk เพื่อพิมพ์เฉพาะสิ่งที่จับคู่ได้อย่างไร?
ฉันเห็นตัวอย่างและหน้าคนมากมายเกี่ยวกับวิธีการทำสิ่งต่างๆเช่นการค้นหาและแทนที่โดยใช้ sed, awk หรือ gawk แต่ในกรณีของฉันฉันมีนิพจน์ทั่วไปที่ฉันต้องการเรียกใช้กับไฟล์ข้อความเพื่อแยกค่าเฉพาะ ฉันไม่ต้องการทำการค้นหาและแทนที่ สิ่งนี้ถูกเรียกจากทุบตี ลองใช้ตัวอย่าง: ตัวอย่างนิพจน์ทั่วไป: .*abc([0-9]+)xyz.* ตัวอย่างไฟล์อินพุต: a b c abc12345xyz a b c ง่ายเหมือนเสียงนี้ฉันไม่สามารถหาวิธีเรียก sed / awk / gawk ได้อย่างถูกต้อง สิ่งที่ฉันหวังว่าจะทำคือจากในสคริปต์ทุบตีของฉันมี: myvalue=$( sed <...something...> input.txt ) สิ่งที่ฉันได้ลอง ได้แก่ : sed -e 's/.*([0-9]).*/\\1/g' example.txt # extracts the entire input file sed -n 's/.*([0-9]).*/\\1/g' example.txt # …
101 regex  unix  sed  awk  gawk 

6
แท็บคั่นค่าใน awk
ฉันจะเลือกคอลัมน์แรกจากสตริงที่คั่นด้วย TAB ได้อย่างไร # echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk -F'\t' '{print $1}' ข้างต้นจะส่งกลับทั้งบรรทัดไม่ใช่แค่ "LOAD_SETTLED" ตามที่คาดไว้ อัปเดต: ฉันต้องการเปลี่ยนคอลัมน์ที่สามในค่าที่คั่นด้วยแท็บ ต่อไปนี้ใช้ไม่ได้ echo $line | awk 'BEGIN { -v var="$mycol_new" FS = "[ \t]+" } ; { print $1 $2 var $4 $5 $6 $7 $8 $9 }' >> /pdump/temp.txt อย่างไรก็ตามวิธีนี้ทำงานได้ตามที่คาดไว้หากตัวคั่นเป็นเครื่องหมายจุลภาคแทนที่จะเป็นแท็บ echo …
92 awk 

7
วิธีใช้ awk จัดเรียงตามคอลัมน์ 3
ฉันมีไฟล์ (user.csv) แบบนี้ ip,hostname,user,group,encryption,aduser,adattr ต้องการพิมพ์เรียงคอลัมน์ทั้งหมดตามผู้ใช้ ฉันลองawk -F ":" '{print|"$3 sort -n"}' user.csvแล้วมันไม่ได้ผล
92 awk 

11
จะพิมพ์คอลัมน์ทั้งหมดหลังตัวเลขโดยใช้ awk ได้อย่างไร
บนเชลล์ฉันจะไปที่ awk เมื่อฉันต้องการคอลัมน์ใดคอลัมน์หนึ่ง สิ่งนี้พิมพ์คอลัมน์ 9 ตัวอย่างเช่น: ... | awk '{print $9}' ฉันจะบอกให้ awk พิมพ์คอลัมน์ทั้งหมดรวมทั้งและหลังคอลัมน์ 9ไม่ใช่เฉพาะคอลัมน์ 9 ได้อย่างไร
90 shell  awk 

6
จะเพิ่มที่ท้ายบรรทัดที่มีรูปแบบด้วย sed หรือ awk ได้อย่างไร?
นี่คือไฟล์ตัวอย่าง: somestuff... all: thing otherthing some other stuff สิ่งที่ฉันต้องการทำคือเพิ่มในบรรทัดที่ขึ้นต้นด้วยall:สิ่งนี้: somestuff... all: thing otherthing anotherthing some other stuff
89 bash  sed  awk 

11
แยกไฟล์หนึ่งไฟล์ออกเป็นหลายไฟล์ตามตัวคั่น
ฉันมีไฟล์เดียวที่มี-|ตัวคั่นหลังแต่ละส่วน ... จำเป็นต้องสร้างไฟล์แยกกันสำหรับแต่ละส่วนโดยใช้ยูนิกซ์ ตัวอย่างของไฟล์อินพุต wertretr ewretrtret 1212132323 000232 -| ereteertetet 232434234 erewesdfsfsfs 0234342343 -| jdhg3875jdfsgfd sjdhfdbfjds 347674657435 -| ผลลัพธ์ที่คาดหวังในไฟล์ 1 wertretr ewretrtret 1212132323 000232 -| ผลลัพธ์ที่คาดหวังในไฟล์ 2 ereteertetet 232434234 erewesdfsfsfs 0234342343 -| ผลลัพธ์ที่คาดหวังในไฟล์ 3 jdhg3875jdfsgfd sjdhfdbfjds 347674657435 -|
88 linux  unix  awk  split 

5
แสดงชื่อไฟล์และหมายเลขบรรทัดในเอาต์พุต grep
ฉันพยายามค้นหาไดเร็กทอรีรางของฉันโดยใช้ grep ฉันกำลังมองหาคำที่ต้องการและต้องการ grep เพื่อพิมพ์ชื่อไฟล์และหมายเลขบรรทัด มีแฟล็ก grep ที่จะทำเพื่อฉันหรือไม่? ฉันพยายามใช้ชุดค่าผสม-nและ-lแต่สิ่งเหล่านี้เป็นการพิมพ์ชื่อไฟล์โดยไม่มีตัวเลขหรือเพียงแค่ทิ้งข้อความจำนวนมากไปยังเทอร์มินัลซึ่งไม่สามารถอ่านได้ง่าย เช่น: grep -ln "search" * ฉันต้องต่อท่อเพื่อ awk หรือไม่?
87 awk  grep 

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