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

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

6
ประมวลผลไฟล์ / etc / passwd เพื่อแสดงรายการผู้ใช้ทั้งหมดที่มีโฮมโฟลเดอร์อยู่ใน / home
ฉันมีตัวอย่างไฟล์ / etc / passwd ดังนี้: tom:x:1000:1000:Work:/home/tom:/bin/bash george:x:1000:1000:Work:/home/george:/bin/bash bla:x:1000:1000:Work:/home/bla:/bin/bash boo:x:1000:1000:Work:/home/boo:/bin/bash bee:x:1000:1000:Work:/root/list:/bin/bash /home/ฉันพยายามที่จะแสดงรายชื่อผู้ใช้ทั้งหมดที่มีบ้านในโฟลเดอร์ ฉันเขียน cat ~/Desktop/e.txt |awk -F ":" '{if ($6 ~/^/home/) print $1;}' โดยที่ e.txt เป็นข้อความที่ฉันคัดลอกมาที่นี่ ฉันเข้าใจว่ามีปัญหากับแบ็กสแลชซึ่งเป็นอักขระการหลบหนี แต่ฉันจะแก้ไขได้อย่างไรเพื่อให้สามารถแสดงรายการเหล่านั้นในหนึ่งบรรทัดของคำสั่งได้

2
gawk inplace และ stdout
มันเป็นไปได้ที่จะใช้gawkของ-i inplaceตัวเลือกและพิมพ์สิ่งที่stdout? ตัวอย่างเช่นถ้าฉันต้องการอัปเดตไฟล์และหากมีการเปลี่ยนแปลงใด ๆ ให้พิมพ์ชื่อไฟล์และบรรทัดที่เปลี่ยนแปลงไปที่stderrฉันสามารถทำสิ่งต่าง ๆ เช่น find -type f -name 'myfiles' -exec gawk -i inplace '{if(gsub(/pat/, "repl")) { print FILENAME > "/proc/self/fd/2" ; print > "/proc/self/fd/2"; } print;}' {} + แต่มีวิธีใช้stdoutแทนหรือวิธีที่สะอาดกว่าในการพิมพ์บล็อกนั้นไปยังสตรีมสำรอง
10 awk  gawk 

2
การรวมคอลัมน์จากสองไฟล์แยกกัน
วิธีสร้างไฟล์ใหม่ที่ผสานคอลัมน์เลือกจากสองไฟล์โดยใช้ awk? โดยไม่ทำให้คำสั่งซื้อองค์ประกอบของไฟล์ BOTH ยุ่งเหยิง ตัวอย่าง: ไฟล์ 3 อาจมีคอลัมน์ 1,2,3 จากไฟล์ 1 และคอลัมน์ 4 จากไฟล์ 2 File 1 A 23 8 T A 63 9 9 B 45 3 J File 2 A 0 A 6 B 5 File 3 A 23 8 0 A 63 9 6 B 45 …

3
แทนที่สตริงด้วยดัชนีตามลำดับ
ใครสามารถแนะนำวิธีที่สง่างามเพื่อให้บรรลุนี้ การป้อนข้อมูล: test instant () test instant () ... test instant () //total 1000 lines ผลลัพธ์ควรเป็น: test instant1 () test instant2 () test instant1000() บรรทัดว่างอยู่ในไฟล์อินพุตของฉันและมีไฟล์จำนวนมากภายใต้ไดเรกทอรีเดียวกันที่ฉันต้องดำเนินการในครั้งเดียว ฉันพยายามทำสิ่งนี้เพื่อแทนที่ไฟล์จำนวนมากใน dir เดียวกันและไม่ทำงาน for file in ./*; do perl -i -000pe 's/instance$& . ++$n/ge' "$file"; done ข้อผิดพลาด: Substitution replacement not terminated at -e line 1. …

1
หนีจุดเดียวด้วยแบ็กสแลชคู่ - awk
หนังสือ "การเขียนโปรแกรม awk ที่มีประสิทธิภาพ" มีตัวอย่างเกี่ยวกับการแยกฟิลด์ นี่คือตัวอย่าง: ‘FS = "\\.."’ถ้าคุณต้องการที่สาขาที่จะแยกจากกันโดยระยะเวลาที่แท้จริงตามด้วยอักขระตัวเดียวใช้ เหตุใดจึงเป็นแบ็กสแลชสองครั้ง มันไม่ควรจะเป็น\..?

4
เรียงลำดับฟิลด์แบบอินไลน์
ฉันพยายามจัดเรียงภายในบรรทัดอินพุตที่มีจำนวนฟิลด์ที่ไม่รู้จัก: การป้อนข้อมูล: ab bc bc ab cd ef bc bc cd ef cd bc ab ef ab bc cd gh เอาท์พุท: ab bc ab bc bc cd ef bc cd ef ab cb cd ab bc cd ef gh ฉันใช้สิ่งที่คล้ายกันawk '{if($2 < $1) print $2,$1;else print}'แต่ดูเหมือนว่ามันจะยุ่งมากกว่าสองสาขา ความช่วยเหลือใด ๆ

4
awk กำหนดให้กับตัวแปรหลายตัวพร้อมกัน
ฉันพยายามดึงค่าตัวเลขสองค่าออกมาจากสตริงและกำหนดให้กับตัวแปรที่ใช้awk( gawkเป็นสิ่งที่ฉันใช้โดยเฉพาะ) ฉันต้องการดึงหมายเลขรุ่นหลักและรุ่นรองออกจากสตริงรุ่น tmux เป็นawkตัวแปรเช่น: อินพุต: tmux 2.8; maj == 2และmin == 8 อินพุต: tmux 1.9a; maj == 1และmin == 9 อินพุต: tmux 2.10; maj == 2และmin == 10 สมมติว่าอินพุตของฉันมาจากtmux -Vstdin ฉันมีสิ่งต่อไปนี้: tmux -V | awk '{ maj = +gensub(/([0-9]+)\..*/, "\\1", "g", $2); min = +gensub(/.*\.([0-9]+).*/, "\\1", "g", $2); # …
9 awk  gawk 

1
awk ลบจุดออกจากสตริงโดยไม่คาดคิด
ฉันต้องการเพิ่มคอลัมน์ (ที่ 2) ใน.csvไฟล์และฉันต้องการให้ค่าของคอลัมน์นั้นเป็นสตริงและจะถูกยกมา คำสั่งต่อไปนี้จะเพิ่มคอลัมน์ แต่ไม่มีเครื่องหมายคำพูด: awk -F"," 'BEGIN { OFS = "," } {$2="2.4.0"; print}' test.csv > output.csv วิธีการต่อไปนี้รวมคำพูด แต่ด้วยเหตุผลบางประการมันจะลบ.(จุด) สุดท้ายออกจากค่า awk -F"," 'BEGIN { OFS = "," } {$2="\""2.4.0"\""; print}' test.csv > output.csv ดังนั้นคุณค่าของฉันคือ "2.40" ฉันจะไปเกี่ยวกับเรื่องนี้ได้อย่างไร
9 awk  csv 

3
วิธีการจับภาพที่อยู่ IP แรกจากคำสั่ง ifconfig?
วิธีการจับที่อยู่ IP แรกที่มาจากifconfigคำสั่ง? ifconfig -a enw178032: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 100.14.22.12 netmask 255.255.0.0 broadcast 100.14.255.255 inet6 fe80::250:56ff:fe9c:158a prefixlen 64 scopeid 0x20<link> ether 00:10:56:9c:65:8a txqueuelen 1000 (Ethernet) RX packets 26846250 bytes 12068811576 (11.2 GiB) RX errors 0 dropped 58671 overruns 0 frame 0 TX packets 3368855 bytes 1139160934 (1.0 GiB) TX …
9 linux  bash  awk  sed  ifconfig 

5
ลบรายการที่ซ้ำตามค่าของคอลัมน์อื่น
ฉันมีไฟล์ต่อไปนี้: AA,true AA,false BB,false CC,false BB,true DD,true trueฉันพยายามที่จะมองหาที่ซ้ำกันและลบบรรทัดที่มีค่าเท่ากับคอลัมน์ ตามที่ควรเป็น: AA,false BB,false CC,false DD,true

5
awk sed ถ้ามีคำสั่ง
ฉันกำลังพยายามเพิ่ม 0 ถึงจุดเริ่มต้นหากมี "" ที่อักขระที่ 2 ของบรรทัดนั้น ฉันไม่สามารถรวมสองสิ่งนี้เข้าด้วยกันได้ awk '{ print substr( $0, 2, 1 ) }' file.txt แสดงตัวอักษรที่สอง sed -ie "s/.\{0\}/0/" file.txt เพิ่มศูนย์ถึงจุดเริ่มต้น ควรมี "ถ้าอักขระตัวที่สองคือจุด" ไฟล์ตัวอย่าง: 1.02.2017 23:40:00 10.02.2017 23:40:00 สุดท้าย: 01.02.2017 23:40:00 10.02.2017 23:40:00

1
วิธีรับแถวที่คอลัมน์ n ประกอบด้วยคอลัมน์ mth
ฉันมีไฟล์ CSV ที่มีโดเมนและเว็บเมลเช่นนี้ site1.com,mail.site1.com site2.com,testmail.com site3.com,mx.site3.com site4.com,smtp.site4.com site5.com,foomail.com site6.com,barmail.com site7.com,webmail.site7.com site8.com,01mx.site8.com site9.com,foobarmail.com site10.com,mx-smtp222.site10.com ฉันต้องการรับแถวที่คอลัมน์เว็บเมลมีคอลัมน์โดเมนของแถวเดียวกัน สำหรับตัวอย่างข้างต้นผลลัพธ์ควรเป็น: site1.com,mail.site1.com site3.com,mx.site3.com site4.com,smtp.site4.com site7.com,webmail.site7.com site8.com,01mx.site8.com site10.com,mx-smtp222.site10.com

4
วิธีเพิ่มตัวนับบรรทัดสำหรับการแทนที่การเริ่มต้นบรรทัดด้วย AWK / …
ครั้งแรกที่ฉันคิดเกี่ยวกับ SED ( sed "s/^/COUNTER \&/" /tmp/1.tex) แต่มันถูกออกแบบมาสำหรับบรรทัดเดียวและฉันไม่สามารถเพิ่มตัวนับได้ด้วยความคิดดังนั้นตอนนี้awkเพราะฉันมีประสบการณ์ที่ยอดเยี่ยมด้วยgawkวิธีการแบบบูรณาการ ข้อมูล What & South Dragon & North Dragon & 5 \\ \hline What & South Dragon & North Dragon & 5 \\ \hline What & South Dragon & North Dragon & 5 \\ \hline ผลลัพธ์ที่คาดหวัง 1 & What & South Dragon & …

2
Grep เริ่มต้นจากข้อความคงที่จนกระทั่งบรรทัดว่างแรก
ฉันมีไฟล์prova.txtเช่นนี้: Start to grab from here: 1 fix1 fix2 fix3 fix4 random1 random2 random3 random4 extra1 extra2 bla Start to grab from here: 2 fix1 fix2 fix3 fix4 random1546 random2561 extra2 bla bla Start to grab from here: 1 fix1 fix2 fix3 fix4 random1 random22131 และฉันต้อง grep out จาก "Start …

8
วิธี grep แถวที่มีค่าบางอย่างในคอลัมน์ที่เฉพาะเจาะจง
ฉันมีไฟล์ดังต่อไปนี้ 200.000 1.353 0.086 200.250 1.417 0.000 200.500 1.359 0.091 200.750 1.423 0.000 201.000 1.365 0.093 201.250 1.427 0.000 201.500 1.373 0.093 201.750 1.432 0.000 202.000 1.383 0.091 202.250 1.435 0.000 202.500 1.392 0.087 202.750 1.436 0.000 203.000 1.402 0.081 203.250 1.437 0.001 203.500 1.412 0.073 204.000 1.423 0.065 204.500 …
9 awk  grep 

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