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

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

1
การสร้างแถบความคืบหน้าด้วย“ กล่องโต้ตอบ” จากเอาต์พุต rsync
ฉันกำลังมองหาวิธีในการกรอง / เปลี่ยนเส้นทาง rsync ในลักษณะที่สามารถป้อนไปยังคำสั่ง "dialog --gauge" ดังนั้นฉันสามารถดูแถบความคืบหน้าที่ดีในระหว่างการซิงค์ไฟล์ ขณะนี้ฉันเพิ่งทดสอบโดยตรงที่พร้อมท์ แต่ฉันวางแผนที่จะทำในเชลล์สคริปต์ (ทุบตี) ฉันดูรอบ ๆ อินเทอร์เน็ตและพบบิตและชิ้นส่วน แต่ฉันก็ยังขาดอะไรบางอย่างที่จะทำให้มันใช้งานได้ (ข้อจำกัดความรับผิดชอบ: นี่อาจเป็นวิธีที่ผิดโดยสิ้นเชิงและเป็นการเปลี่ยนเส้นทาง / การวางท่อที่น่าตกใจ) สิ่งที่ฉันได้รวบรวม: rsync -avz --progress -e "ssh" user@server:/home/user/data/ /home/user/data | awk -f /home/user/rsync.awk | sed 's/\([0-9]*\).*/\1/' | dialog --title "My Gauge" --gauge "Hi, this is a gauge widget" 20 70 ก่อนอื่นฉันมีคำสั่ง rsync …
16 linux  bash  scripting  awk  rsync 

2
จะใช้ regex เป็นตัวคั่นฟิลด์ใน awk ได้อย่างไร
ฉันพยายามที่จะใช้ regex เป็น seperator awkในสนาม จากการอ่านของฉันนี้เป็นไปได้ แต่ฉันไม่สามารถรับไวยากรณ์ที่ถูกต้อง rpm -qa | awk '{ 'FS == [0-9]' ; print $1 }' awk: cmd. line:1: { FS awk: cmd. line:1: ^ unexpected newline or end of string คิด? เป้าหมายหากไม่ได้รับการยกเว้นคือการได้รับรายชื่อซอฟต์แวร์ที่ไม่มีหมายเลขเวอร์ชั่น

5
ค้นหาไฟล์ที่มีคำค้นหาหลาย ๆ คำในไฟล์
ฉันกำลังมองหาวิธีที่จะแสดงรายการไฟล์ทั้งหมดในไดเรกทอรีที่มีชุดคำหลักเต็มรูปแบบที่ฉันค้นหาทุกที่ในไฟล์ ดังนั้นคำหลักไม่จำเป็นต้องปรากฏในบรรทัดเดียวกัน วิธีหนึ่งในการทำเช่นนี้คือ: grep -l one $(grep -l two $(grep -l three *)) คำหลักสามคำเป็นเพียงตัวอย่างมันอาจมีสองหรือสี่คำเป็นต้น วิธีที่สองที่ฉันนึกได้คือ: grep -l one * | xargs grep -l two | xargs grep -l three วิธีที่สามที่ปรากฏในคำถามอื่นจะเป็น: find . -type f \ -exec grep -q one {} \; -a \ -exec grep -q two {} \; -a …

3
awk + print line เฉพาะเมื่อฟิลด์แรกเริ่มต้นด้วยสตริงเป็น Linux1
วิธีพิมพ์บรรทัดในกรณีที่ฟิลด์แรกเริ่มต้นด้วย Linux1 ตัวอย่างเช่น: echo Linux1_ver2 12542 kernel-update | awk '{if ($1 ~ Linux1 ) print $0;}' เป้าหมายคือการพิมพ์บรรทัดขณะที่ฟิลด์แรกเริ่มต้นด้วย Linux1 ตัวอย่างของเส้น: Linux1-new 36352 Version:true Linux1-1625543 9847 Linux1:16254 8467563 หมายเหตุ - ช่องว่างหรือ TAB อาจอยู่ก่อนการยื่นครั้งแรก

8
วิธีการทดสอบว่าองค์ประกอบอาร์เรย์มีความเท่าเทียมกันในการทุบตี?
อาร์เรย์ต่อไปนี้แสดงจำนวนดิสก์ในเครื่อง linux แต่ละเครื่อง แต่ละอาร์เรย์เดียวรวมถึงจำนวนของดิสก์ในที่เครื่องลินุกซ์ echo ${ARRAY_DISK_Quantity[*]} 4 4 4 4 2 4 4 4 วิธีง่ายๆในการระบุว่าทุกค่าของอาร์เรย์มีค่าเท่ากัน? สถานะที่ดี: 4 4 4 4 4 4 4 4 สถานะไม่ดี: 4 4 4 4 4 4 2 4 สถานะไม่ดี: 6 6 6 6 6 6 6 6 6 6 2 6 2
15 bash  shell-script  awk  array 


5
ฉันจะแปลงการประทับเวลาในคอลัมน์เป็นวันที่ได้อย่างไร
ฉันมีไฟล์ที่มีสิ่งนี้: 1415602803,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22 1415602807,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22 1415602811,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22 1415602815,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22 ฉันต้องการแปลงเวลาเป็นวันที่ในรูปแบบนี้: 2014-11-10 02:00:03,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22 2014-11-10 02:00:07,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22 2014-11-10 02:00:11,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22 2014-11-10 02:00:15,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22 ฉันจะทำสิ่งนั้นได้อย่างไร ฉันรู้ว่างานนี้: perl -pe 's/(\d+)/localtime($1)/e'(จากคำถามนี้ ) Mon Nov 10 02:00:03 2014แต่รูปแบบออกเป็น ฉันรู้ว่าคำสั่งนี้สามารถแปลงการประทับเวลาเป็นผลลัพธ์ที่ต้องการ: date -d@1415602803 +"%F %H:%M:%S"แต่ฉันไม่สามารถawkใช้งานได้system("cmd")เนื่องจากการใช้ใบเสนอราคาและอะไรก็ตาม

8
วิธีการ grep หลายบรรทัด
คุณจะทำการ grep สำหรับข้อความที่ปรากฏในสองบรรทัดได้อย่างไร? ตัวอย่างเช่น: pbsnodes เป็นคำสั่งที่ฉันใช้ที่ส่งคืนการใช้ประโยชน์ของคลัสเตอร์ linux root$ pbsnodes node1 state = free procs = 2 bar = foobar node2 state = free procs = 4 bar = foobar node3 state = busy procs = 8 bar = foobar ฉันต้องการกำหนดจำนวนของ procs ที่ตรงกับโหนดที่อยู่ในสถานะ 'ว่าง' จนถึงตอนนี้ฉันสามารถระบุ "จำนวนของ procs" และ "โหนดในสถานะอิสระ" แต่ฉันต้องการรวมพวกมันเป็นคำสั่งเดียวที่แสดง procs …


5
ผสานสองไฟล์ทีละบรรทัดด้วยสัญลักษณ์สามท่อคั่น "|||"
|||ฉันมีสองไฟล์แบบคู่ขนานกับจำนวนเดียวกันของเส้นในสองภาษาและแผนการที่จะผสานเหล่านี้สายสองไฟล์โดยสอดคล้องกับตัวคั่น เช่นทั้งสองไฟล์มีดังนี้: ไฟล์ A: 1Mo 1,1 I love you. 1Mo 1,2 I like you. Hi 1,3 I am hungry. Hi 1,4 I am foolish. ไฟล์ B: 1Mo 1,1 Ich liebe dich. 1Mo 1,2 Ich mag dich. Hi 1,3 Ich habe Durst. Hi 1,4 Ich bin neu. ผลลัพธ์ที่คาดหวังเป็นดังนี้: 1Mo 1,1 I …

2
วิธีที่เร็วที่สุดในการลบรายการที่ซ้ำกันในรายการคำศัพท์ขนาดใหญ่?
ฉันต้องทำรายการคำซ้ำให้ซ้ำซ้อน ฉันลองใช้หลายคำสั่งและทำการวิจัยที่นี่และที่นี่ซึ่งพวกเขาอธิบายว่าวิธีที่เร็วที่สุดในการขจัดความซ้ำซ้อนของรายการคำดูเหมือนจะใช้ awk awk -> O (n)? จัดเรียง -> O (n บันทึก n)? อย่างไรก็ตามฉันพบว่าสิ่งนี้ดูเหมือนจะไม่เป็นความจริง นี่คือผลการทดสอบของฉัน: sort -u input.txt -o output.txt จริง 0m12.446s ผู้ใช้ 0m11.347s sys 0m0.906s awk '!x[$0]++' input.txt > output.txt ผู้ใช้0m47.221s จริง0m45.419s sys 0m1.260s ดังนั้นการใช้ sort -u จึงเร็วกว่า 3.7 เท่า ทำไมนี้ มีวิธีที่เร็วยิ่งขึ้นในการทำซ้ำซ้อน? *********** อัปเดต ******** เมื่อมีคนชี้ให้เห็นในความคิดเห็นอาจเป็นไปได้ว่ารายการคำศัพท์ของฉันเรียงลำดับแล้วบ้าง เพื่อแยกความเป็นไปได้นี้ฉันสร้าง wordlist สองรายการโดยใช้สคริปต์ …
14 bash  awk  performance  sort 

3
จะลบคอลัมน์หรือหลายคอลัมน์ออกจากไฟล์โดยใช้คำสั่ง shell ได้อย่างไร
ไฟล์ของฉัน ARCHIVE B1_NAME B2_NAME B3_NAME ELEMENT INFO_NAM WERT PROCID -------- -------- -------- -------- -------- -------- ---- ------ 15MinAvg AIRSS 33-GIS DMDMGIS1 I MvAvr15m 1123 CP 15MinAvg AIRSS 33-GIS DMDMGIS1 P MvAvr15m 2344 CP 15MinAvg AIRSS 33-GIS DMDMGIS1 Q MvAvr15m 4545 CP 15MinAvg AIRSS 33-GIS DMDMGIS2 I MvAvr15m 6576 CP 15MinAvg …

5
จะรับค่าสัมบูรณ์โดยใช้ awk ได้อย่างไร
หากฉันมีวันที่ด้านล่างสองวัน: 2015-09-12,2015-08-13 และฉันต้องการได้จำนวนวันระหว่างพวกเขาฉันจะใช้รหัสด้านล่าง: awk -F'[-,]' '{print 360*($4-$1)+30*($5-$2)+($6-$3)}' ผลลัพธ์สำหรับรหัสนี้จะเป็น-29จริงในขณะที่ความแตกต่างคือ29

5
ลบบรรทัดที่ซ้ำกันในขณะที่รักษาลำดับของบรรทัด
[root@server]# awk '!seen[$0]++' out.txt > cleaned awk: (FILENAME=out.txt FNR=8547098) fatal error: internal error Aborted [root@server]# "" เซิร์ฟเวอร์ "" มี: 8 GByte RAM + 16 GByte SWAP, x> 300 GByte พื้นที่ว่าง, amd64, CPU ของเดสก์ท็อป ลินุกซ์ทางวิทยาศาสตร์ 6.6 ไม่มีอะไรอื่นที่จะทำเพื่อให้โหลด อ๊ะยกเลิกหลังจากนั้นสองสามวินาที .. out.txt คือ ~ 1.6 GByte GNU Awk 3.1.7 คำถาม : ฉันจะลบบรรทัดที่ซ้ำกันในขณะที่รักษาลำดับของบรรทัดได้อย่างไร ตัวพิมพ์เล็กก็สำคัญเช่นกัน: …

5
การแทนที่รูปแบบการจับคู่เคสด้วย sed
ฉันมีซอร์สโค้ดกระจายข้ามหลายไฟล์ มันมีรูปแบบที่ฉันจำเป็นต้องเปลี่ยนด้วยabcdefpqrstuvxyz รูปแบบอาจจะAbcdef(กรณีประโยค) Pqrstuvxyzแล้วจะต้องถูกแทนที่ด้วย รูปแบบอาจจะAbCdEf(กรณีสลับ) PqRsTuVxYzแล้วจะต้องถูกแทนที่ด้วย กล่าวโดยย่อคือฉันต้องจับคู่กรณีของรูปแบบต้นทางและใช้รูปแบบปลายทางที่เหมาะสม ฉันจะใช้สิ่งนี้sedกับเครื่องมืออื่นได้อย่างไร

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