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

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

10
การลบรหัสสี ANSI ออกจากสตรีมข้อความ
ตรวจสอบผลลัพธ์จาก perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' ในเท็กซ์เอดิเตอร์ (เช่นvi) แสดงสิ่งต่อไปนี้: ^[[37mABC ^[[0m เราจะลบรหัสสี ANSI ออกจากไฟล์เอาต์พุตได้อย่างไร ฉันคิดว่าวิธีที่ดีที่สุดคือการส่งออกท่อผ่านตัวแก้ไขสตรีม ต่อไปนี้ใช้ไม่ได้ perl -e 'use Term::ANSIColor; print color "white"; print "ABC\n"; print color "reset";' | perl -pe 's/\^\[\[37m//g' | perl -pe 's/\^\[\[0m//g'
73 regex  sed  perl  awk 

9
วิธีรับระยะเวลาวิดีโอในไม่กี่วินาที?
ฉันจะรับระยะเวลาวิดีโอเป็นวินาทีได้อย่างไร สิ่งที่ฉันได้ลอง: ffmpeg -i file.flv 2>&1 | grep "Duration" Duration: 00:39:43.08, start: 0.040000, bitrate: 386 kb/s mediainfo file.flv | grep Duration Duration : 39mn 43s นี่ใกล้แค่ไหน แต่ก็ไม่แม่นยำ 2383 เป็น 39.71 นาที ffmpeg -i file.flv 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,// | sed 's@\..*@@g' …
69 ffmpeg  time  awk  clock 

4
awk, mawk, nawk, gawk …อะไรนะ?
ฉันเพิ่งเริ่มเรียนรู้ awk และฉันสับสนเล็กน้อยเกี่ยวกับรุ่นเหล่านั้นทั้งหมด มี "รุ่น" ใดบ้างที่พบในระบบ Unix ที่เหมือนกันทั้งหมดหรือไม่ คุณรู้ไหมไว vi? awk มาตรฐานสนับสนุนตัวเลือก -F หรือไม่
37 unix  awk 

8
sed: วิธีเปลี่ยน line ถ้าพบหรือต่อท้ายไฟล์ถ้าไม่พบ?
ด้วยอินพุตไฟล์เดียวที่มีความคิดเห็น (ขึ้นต้นด้วย #) และ VARIABLE = บรรทัดค่าเป็นไปได้ที่จะแทนที่ค่าสำหรับตัวแปรเดี่ยวหากพบและมิฉะนั้นต่อท้ายคู่ท้ายไฟล์ถ้าไม่พบ? วิธีการปัจจุบันของฉันทำงานโดยการลบในรอบแรกจากนั้นต่อท้ายไฟล์ในรอบที่สอง แต่วิธีนี้ทำให้การเรียงลำดับบรรทัดยุ่งเหยิง (และเป็นสองคำสั่งต่างกัน): sed -r "/^FOOBAR=.*$/d" -i samefile && sed -r "$ a\FOOBAR=newvalue" -i samefile อย่างไรก็ตามมีให้ทำเช่นนี้คือ รักษาคำสั่งซื้อในบรรทัด sed เดียวหรือไม่ หากยูทิลิตี้อื่น (awk, ... ) ทำสิ่งนี้ฉันจะพามันไปนอน
34 linux  command-line  sed  awk 

6
วิธีรับ pid ของกระบวนการที่กำลังรันโดยใช้คำสั่งเดียวที่แยกเอาต์พุตของ ps
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Super User อพยพ 7 ปีที่ผ่านมา ฉันกำลังมองหาบรรทัดเดียวที่คืนค่า pid ของกระบวนการทำงาน ปัจจุบันฉันมี: ps -A -o pid,cmd|grep xxx|head -n 1 pid, commandและส่งกลับกำปั้น ฉันต้องการเฉพาะหมายเลขแรกจากผลลัพธ์และละเว้นส่วนที่เหลือ ฉันคิดว่าsedหรือawkจะช่วยที่นี่ แต่ประสบการณ์ของฉันกับพวกเขามี จำกัด นอกจากนี้ยังมีปัญหาอื่นมันจะคืนค่า pid ของ grep หาก xxx ไม่ทำงาน เป็นเรื่องสำคัญมากที่จะมีบรรทัดเดียวเพราะฉันต้องการนำเอาท์พุทกลับมาใช้เพื่อทำอย่างอื่นเช่นฆ่ากระบวนการนั้น
22 bash  sed  awk  pid 

3
ฉันจะสร้างสารบัญสำหรับเอกสาร markdown ด้วย Python / AWK / SED ได้อย่างไร
ฉันมีเอกสาร markdown ต่อไปนี้: Heading-a ========== ---text--- Heading-b ------------ --- text --- Heading-c ---------- --- text--- Heading-d ======= --- text---- Heading-e --- ... ฉันต้องการสร้างสารบัญที่สามารถคลิกได้ซึ่งคล้ายกับที่LaTexทำ แต่ไม่สามารถหาเครื่องมือที่ทำสิ่งนี้ซึ่งแนะนำให้ฉันรู้ว่าเราควรสร้างขึ้นมาหนึ่งอัน เครื่องมือควรรวบรวมส่วนหัว 'H1' และส่วนหัว 'H2' เพื่อให้ได้หมายเลข 1 ถึงHeading-aและหมายเลข 1.1 เป็นHeading-b1.2 ถึงHeading-c, 2. ถึงHeading-d, 2.1 ไปHeading-eเรื่อย ๆ เช่นที่เราควรได้รับสารบัญต่อไปนี้: 1. Heading-a 1.1. Heading-b 1.2. Heading-c 2. Heading-d 2.1. Heading-e …

2
แทนที่ n การเกิดขึ้นของสตริงในแต่ละบรรทัดของไฟล์ข้อความ
ฉันมีไฟล์ข้อความขนาดใหญ่ที่มีสตริงคั่นด้วยช่องว่าง (2-5) สตริงสามารถมี "" "หรือ" - " ฉันต้องการแทนที่พูดช่องว่างที่สองด้วยท่อ วิธีที่ดีที่สุดที่จะไปคืออะไร? ใช้ sed ฉันคิดเรื่องนี้: sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt ความคิดอื่น ๆ / ดีกว่า / เรียบง่ายขึ้น?
15 linux  command-line  sed  awk 

2
ฉันจะระบุอักขระที่ไม่ใช่ ASCII จากเชลล์ได้อย่างไร
มีวิธีง่ายๆในการพิมพ์ทั้งหมดอักขระที่ไม่ใช่ ASCII และหมายเลขบรรทัดที่พวกเขาเกิดขึ้นในไฟล์โดยใช้อรรถประโยชน์บรรทัดคำสั่งเช่นgrep, awk, perletc? ฉันต้องการเปลี่ยนการเข้ารหัสของไฟล์ข้อความจาก UTF-8 เป็น ASCII แต่ก่อนที่จะทำเช่นนั้นต้องการแทนที่อักขระทั้งหมดที่ไม่ใช่ ASCII ด้วยตนเองเพื่อหลีกเลี่ยงการเปลี่ยนแปลงอักขระที่ไม่คาดคิดซึ่งเกิดขึ้นจากรูทีนการแปลงไฟล์
13 linux  grep  perl  awk  ascii 

3
การกรองเอาต์พุตคำสั่งด้านบน
ฉันใช้ Mac และต้องการกรองผลลัพธ์ของtopคำสั่งสำหรับกระบวนการเฉพาะเช่นคอลัมน์ PID, COMMAND และ% CPU เท่านั้นที่จะแสดง หลังจากรับ PID ของกระบวนการฉันเรียกใช้: top -pid 1234 อย่างไรก็ตามจะแสดงมากกว่า 15 คอลัมน์สำหรับกระบวนการนั้น ฉันสามารถไพพ์เอาต์พุตของ 'คำสั่งใน awk และแสดงเฉพาะ: PID COMMAND %CPU คอลัมน์? ฉันไม่ต้องการเก็บผลลัพธ์ในไฟล์ข้อความและประมวลผล ฉันสนใจที่จะตรวจสอบกระบวนการตามเวลาจริง
12 macos  command-line  bash  awk  top 

2
ฉันจะหาเวอร์ชั่น awk ของฉันได้อย่างไร
หากฉันต้องการทราบรุ่นของ awk ฉันจะได้รับสิ่งต่อไปนี้: $ awk --version awk: not an option: --version ตรวจสอบในman awkฉันเห็นว่า awk ของฉันคือ mawk - การสแกนรูปแบบและภาษาการประมวลผลข้อความ
12 awk 


1
วิธีใช้ตัวคั่น awk ของเครื่องหมายคำพูดเดี่ยว?
ฉันต้องการใช้ awk เพื่อดึงข้อมูลจากผลลัพธ์ SQL ดังนี้: (จำนวน (เซิร์ฟเวอร์เซิร์ฟเวอร์ที่แตกต่าง) = '2') และจำเป็นต้องแยกตัวเลขซึ่งก็คือ 2 ในตัวอย่างนี้ ฉันต้องการทำบางสิ่งบางอย่างดังต่อไปนี้ แต่ไม่สามารถหาวิธีที่จะหลีกเลี่ยงคำพูดเดียว: <sqlCommand> | awk 'BEGIN{FS="'"}{print $2}' ฉันจะขอใบเสนอราคาเดียวตามตัวอักษรเป็นตัวคั่นฟิลด์ใน awk ได้อย่างไร

1
Awk ไม่ทำงานเมื่ออยู่ในเครื่องหมายคำพูดคู่
คำสั่งนี้ไม่ทำงาน: ssh $HOST "ls -l | awk '{print $1}'"` awkดังกล่าวข้างต้นจะไม่สนใจคำสั่ง ฉันคิดว่ามันอาจเป็นเพราะคำพูดซ้อน นอกจากนี้ฉันจะเพิ่มเครื่องหมายคำพูดคู่อีกชุดหนึ่งใน awk ได้อย่างไร เช่น: ssh $HOST "awk '{print $1 "*"}' /some_file" ฉันพยายามหลบหนีคำพูดฉันก็ลองสิ่งนี้: ssh $HOST "awk '{print $1 "\""*"\""}' /some_file" ปราศจากความสำเร็จ.
11 linux  shell  awk 

4
วิธีไพพ์เอาต์พุต awk (ที่มีอินพุตต่อเนื่องเป็นระยะ) ไปยังไฟล์เอาต์พุต
ฉันพยายามเขียนคำสั่งที่ไพพ์เอาต์พุตต่อเนื่องของคำสั่งfree (รันทุกวินาที) ไปยังคำสั่ง awk ที่วิเคราะห์ค่าเฉพาะ (หน่วยความจำว่างที่มีอยู่) และเอาต์พุตนี้ไปยังไฟล์ที่มีการประทับเวลา นี่คือความพยายามในปัจจุบันของฉันที่คำสั่ง: free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut และอีกทางเลือกหนึ่งหลังจาก Googling free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}' การทดสอบแต่ละครั้งจะสร้างไฟล์เปล่า ข้อเสนอแนะหรือวิธีการที่แตกต่างกันอาจจะ?
10 awk  pipe 

1
การนับจำนวนที่เกิดขึ้นในคอลัมน์แรกของไฟล์
เรามีไฟล์นี้: 1 2 1 3 1 2 3 3 52 1 52 300 และอีก 1,000 ฉันต้องการนับจำนวนครั้งที่แต่ละค่าเกิดขึ้นในคอลัมน์แรก 1 3 3 1 52 2 ซึ่งหมายความว่าเราเห็น 1 สามครั้ง. ฉันจะทำสิ่งนั้นใน Perl, AWK หรือ Bash ได้อย่างไร
8 linux  bash  perl  awk 

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