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

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

11
Grep Match และสารสกัด
ฉันมีไฟล์ที่มีบรรทัดเป็น proto=tcp/http sent=144 rcvd=52 spkt=3 proto=tcp/https sent=145 rcvd=52 spkt=3 proto=udp/dns sent=144 rcvd=52 spkt=3 ฉันต้องการที่จะดึงค่าของโปรโตซึ่งเป็นtcp/http, ,tcp/httpsudp/dns จนถึงขณะนี้ผมได้พยายามนี้แต่สามารถดึงค่าเป็นgrep -o 'proto=[^/]*/'proto=tcp/
10 awk  grep 

5
awk / sed / perl one liner + วิธีพิมพ์เฉพาะบรรทัดคุณสมบัติจากไฟล์ json
วิธีพิมพ์เฉพาะคุณสมบัติบรรทัดจากไฟล์ json ตัวอย่างของไฟล์ json { "href" : "http://master02:8080/api/v1/clusters/HDP/configurations?type=kafka-env&tag=version1527250007610", "items" : [ { "href" : "http://master02:8080/api/v1/clusters/HDP/configurations?type=kafka-env&tag=version1527250007610", "tag" : "version1527250007610", "type" : "kafka-env", "version" : 8, "Config" : { "cluster_name" : "HDP", "stack_id" : "HDP-2.6" }, "properties" : { "content" : "\n#!/bin/bash\n\n# Set KAFKA specific environment variables here.\n\n# The java implementation to …
10 awk  sed  perl  json  jq 

5
ฉันจะแก้ไข n บรรทัดสุดท้ายในไฟล์ได้อย่างไร
มีคำสั่งให้ฉันแก้ไขบรรทัดสุดท้ายในไฟล์หรือไม่? ฉันมีไฟล์หลายไฟล์ซึ่งทั้งหมดมีจำนวนบรรทัดต่างกัน แต่ฉันต้องการแก้ไข n บรรทัดสุดท้ายในแต่ละไฟล์ เป้าหมายคือการแทนที่เครื่องหมายจุลภาคด้วยเครื่องหมายอัฒภาคในบรรทัดสุดท้าย n แต่จะอยู่ในบรรทัดสุดท้ายเท่านั้น ฉันไม่ต้องการลบบรรทัดใด ๆ ฉันเพียงต้องการแทนที่เครื่องหมายจุลภาคทุกอันด้วยเครื่องหมายอัฒภาคในบรรทัดสุดท้าย n ในแต่ละไฟล์ การใช้คำสั่ง sed ฉันสามารถแทนที่บรรทัดสุดท้ายด้วยคำสั่งนี้ได้ ตามที่อธิบายไว้ที่นี่: ฉันจะลบข้อความในบรรทัดสุดท้ายของไฟล์ได้อย่างไร แต่นี่ทำให้ฉันสามารถแก้ไขบรรทัดสุดท้ายเท่านั้นไม่ใช่บรรทัดสุดท้าย

8
วิธีลบบรรทัดหากมีอักขระหนึ่งครั้ง
ฉันต้องการลบบรรทัดออกจากไฟล์ที่มีอักขระเฉพาะเพียงครั้งเดียวหากมีมากกว่าหนึ่งครั้งหรือไม่มีอยู่ให้เก็บบรรทัดไว้ในไฟล์ ตัวอย่างเช่น: DTHGTY FGTHDC HYTRHD HTCCYD JUTDYC ที่นี่ตัวละครที่ฉันต้องการลบนั้นเป็นCเช่นนั้นคำสั่งควรลบบรรทัดFGTHDCและJUTDYCเพราะพวกเขามีCเพียงครั้งเดียว ฉันจะทำสิ่งนี้โดยใช้อย่างใดอย่างหนึ่งsedหรือawk?

5
แทนที่ขีดล่างด้วยเครื่องหมายจุลภาคและลบเครื่องหมายคำพูดคู่ใน CSV
ฉันมีไฟล์ CSV เป็น input.csv "1_1_0_0_76" "1_1_0_0_77" "1_1_0_0_78" "1_1_0_0_79" "1_1_0_0_80" "1_1_0_0_81" "1_1_0_0_82" "1_1_0_0_83" "1_1_0_0_84" "1_1_0_0_85" ............. เป็นต้น ฉันต้องการแปลงไฟล์ CSV นี้เป็น result.csv 1,1,0,0,76 1,1,0,0,77 1,1,0,0,78 1,1,0,0,79 1,1,0,0,80 1,1,0,0,81 1,1,0,0,82 1,1,0,0,83 1,1,0,0,84 1,1,0,0,85


9
แปลงแถวเป็นคอลัมน์
ฉันมีไฟล์ที่มีรายละเอียดเกี่ยวกับ VM ที่ทำงานในไฮเปอร์ไวเซอร์ เรารันคำสั่งบางคำสั่งแล้วเปลี่ยนเส้นทางผลลัพธ์ไปยังไฟล์ และเป็นข้อมูลที่มีอยู่ในรูปแบบด้านล่าง Virtual Machine : OL6U5 ID : 0004fb00000600003da8ce6948c441bb Status : Running Memory : 65536 Uptime : 17835 Minutes Server : MyOVS1.vmorld.com Pool : HA-POOL HA Mode: false VCPU : 16 Type : Xen PVM OS : Oracle Linux 6 Virtual Machine : OL6U6 ID : 0004fb00000600003da8ce6948c441bc …

6
คุณจะตรวจสอบว่าไฟล์มีอยู่ใน awk ได้อย่างไร? [-d 'filename'] ล้มเหลว
ฉันกำลังพยายามสร้างรายชื่อผู้ใช้ที่มีชุดโฮมไดเรกทอรีซึ่งไม่มีอยู่จริง ดูเหมือนว่าฉันควรทำสิ่งนี้ด้วย awk แต่มีบางอย่างผิดปกติกับไวยากรณ์ของฉัน มันบอกฉันว่า "ไวยากรณ์ไม่ถูกต้อง" ที่] ผมทำอะไรผิดหรือเปล่า? awk -F: '{ if(![ -d "$6"]){ print $1 " " $3 " " $7}}' /etc/passwd รหัสสุดท้ายที่ฉันอาจจะใช้คือ: awk -F: '{if(system( "[ -d " $6 " ]") == 1 && $7 != "/sbin/nologin" ) {print "The directory " $6 " does not exist for …
10 bash  awk  directory 

3
ฉันจะลบข้อความทั้งหมดระหว่างวงเล็บปีกกาในไฟล์ข้อความหลายบรรทัดได้อย่างไร
ตัวอย่าง: This is { the multiline text file } that wants { to be changed } anyway. ควรเป็น: This is that wants anyway. ฉันพบเธรดที่คล้ายกัน ในฟอรัม แต่ดูเหมือนว่าจะไม่สามารถใช้กับวงเล็บปีกกาแบบหลายบรรทัดได้ ถ้าเป็นไปได้ฉันต้องการวิธีการหนึ่งบรรทัดเช่นโซลูชันที่ใช้ grep, sed, awk ... เป็นต้น แก้ไข: โซลูชั่นดูเหมือนจะตกลง แต่ฉันได้สังเกตเห็นว่าไฟล์ต้นฉบับของฉันรวมถึงการทำเครื่องหมายวงเล็บปีกกา ดังนั้นฉันกำลังเปิดคำถามใหม่ ขอบคุณทุกคน: ฉันจะลบข้อความทั้งหมดระหว่างวงเล็บปีกกาแบบซ้อนในไฟล์ข้อความแบบหลายบรรทัดได้อย่างไร?

4
ลบบรรทัดว่างในหน้าจอ awk
ผมพยายามที่จะคิดออกวิธีการแก้ปัญหาหานี้คำถาม ฉันต้องการที่จะใช้awkสำหรับการแก้ปัญหา ไฟล์อินพุตของฉันเป็นดังนี้ -bash-3.2$ cat file ramesh ramesh_venkat ramesh3_venkat3 ramesh4 ramesh5 venkat venkat3 venkat4 ฉันใช้awkคำสั่งเพื่อแยกค่าที่สองหลังจาก_ดังต่อไปนี้ awk -F "_" '{print $2}' file อย่างไรก็ตามแม้ว่าคำสั่งข้างต้นจะพิมพ์ค่าที่ถูกต้องฉันได้รับบรรทัดว่างในผลลัพธ์ของฉัน ฉันมี 2 คำถาม คำถามที่ 1 ฉันจะลบบรรทัดว่างในผลลัพธ์เพื่อให้ได้เฉพาะvenkatและvenkat3ในผลลัพธ์ได้อย่างไร ถ้าฉันใช้printfแทนที่จะเป็นของprintฉันawkฉันจะได้venkatvenkat3ผลลัพธ์ที่ฉันไม่ต้องการบรรลุ ฉันต้องการผลลัพธ์เช่น venkat venkat3 คำถามที่ 2 การใช้ค่าเหล่านั้นเป็นอาเรย์แบบเชื่อมโยงหรือบางอย่างฉันจะค้นหาว่าค่านั้นเกิดขึ้นจริงใน$1คอลัมน์ได้อย่างไร ฉันต้องการที่จะบรรลุสิ่งที่ต้องการ awk -F "_" '$2==1{print $1}' file แก้ไข ฉันไม่ได้สังเกตawkวิธีแก้ปัญหาของ Stephane มันทำในสิ่งเดียวกันกับที่ฉันได้พูดไปรึเปล่า?
10 awk 


2
มี 2 ​​วิธีในการตั้งค่า awk vars ผ่านบรรทัดคำสั่งหรือไม่
ฉันสังเกตเห็นawkตัวอย่างO'Reilly (1997) ซึ่งกำหนดตัวแปร awk โดยการตั้งค่าบนบรรทัดคำสั่งหลังจากโปรแกรม - ข้อความ มันไม่ทำงาน แต่ฉันไม่สามารถหารูปแบบนี้ในมนุษย์ / ข้อมูล awk ฉันเพิ่งพลาดมันไป มันลดค่า ... ไวยากรณ์เดียวที่ฉันเห็นในคู่มือเป็น-vตัวเลือก awk '/home/{print foo, bar}' foo="cat" bar="dog" /proc/$$/cmdline เอาท์พุท: cat dog
10 awk 


6
มีทางเลือกอื่นใดสำหรับสวิตช์ -A -B -C grep ของ (เพื่อพิมพ์สองสามบรรทัดก่อนและหลัง)?
grep -A 2 -B 3 พิมพ์ 2 บรรทัดหลังสตริง grep และพิมพ์ 3 บรรทัดก่อนหน้า grep -C 3 พิมพ์ 3 บรรทัดก่อนหน้าและ 3 บรรทัดหลัง น่าเสียดายที่grepฉันใช้ไม่รองรับตัวเลือกเหล่านี้ มีคำสั่งหรือสคริปต์ทางเลือกอื่นที่สามารถจำลองได้หรือไม่? ใช้sed/ awk/ perl/ เชลล์สคริปต์หรือไม่

3
รับส่วนสุดท้ายของสตริงหลังจากยัติภังค์
มีบรรทัดคำสั่งง่าย ๆ ในการแยกส่วนสุดท้ายของสตริงที่คั่นด้วยเครื่องหมายขีดคั่นหรือไม่ เช่นผมต้องการที่จะแยกจาก123foo-bar-123

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