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

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

3
วิธีดูเนื้อหาทั้งหมดในอาเรย์ awk?
ในความเข้าใจของฉันอาร์เรย์ awk เป็นสิ่งที่คล้ายกับหลามพจน์ ดังนั้นฉันจึงเขียนรหัสตะโกนเพื่อสำรวจ: awk '{my_dict[$1] = $2} END { print my_dict}' zen และฉันได้รับ: awk: can't read value of my_dict; it's an array name. เนื่องจากคอลัมน์แรกคือหมายเลข `ฉันจะอ่านเนื้อหาทั้งหมดของอาเรย์หรือสำรวจได้อย่างไร?
41 awk 

2
การลบศูนย์นำหน้าออกจากวันที่
ฉันสร้างนามแฝงของคำสั่ง date เพื่อแสดงวันที่ในรูปแบบต่อไปนี้: 2013.06.14.12.10.02 ใช้คำสั่งนี้: alias date = date +"%Y.%m.%d.%H.%M.%S" ทุกอย่างใช้งานได้ดียกเว้นฉันต้องการเอาเลขศูนย์นำออกจากผลลัพธ์ ไม่มีวิธีที่จะทำให้มันเกิดขึ้นได้โดยการเปลี่ยนรูปแบบ ฉันคิดว่ามันสามารถทำได้โดยเฉพาะท่อส่งออกไปยังคำสั่งอื่น ๆ เช่นและsedawk ระบบปฏิบัติการที่ฉันใช้คือ Ubuntu 12.04.2 LTS
40 sed  awk  date 

6
คุณจะแสดงรายการจำนวนบรรทัดของทุกไฟล์ในไดเรกทอรีในรูปแบบที่มนุษย์อ่านได้อย่างไร
ฉันมีรายการไดเรกทอรีและไดเรกทอรีย่อยที่มีไฟล์ csv ขนาดใหญ่ ไฟล์เหล่านี้มีประมาณ 500 ล้านบรรทัดโดยแต่ละรายการจะมีการบันทึก ผมอยากจะรู้ว่า มีกี่บรรทัดในแต่ละไฟล์ มีกี่บรรทัดในไดเรกทอรี จำนวนบรรทัดทั้งหมด ที่สำคัญที่สุดฉันต้องการสิ่งนี้ใน 'รูปแบบที่มนุษย์อ่านได้' เช่น 12,345,678 มากกว่า 12345678 มันจะเป็นการดีถ้าได้เรียนรู้วิธีการทำ 3 วิธี เครื่องมือทุบตีวานิลลาธรรมดา awk ฯลฯ และ Perl (หรือหลาม)
40 bash  awk  python  perl 

2
awk '! a [$ 0] ++' ทำงานอย่างไร
หนึ่งซับนี้จะลบบรรทัดที่ซ้ำกันออกจากการป้อนข้อความโดยไม่ต้องเรียงลำดับล่วงหน้า ตัวอย่างเช่น: $ cat >f q w e w r $ awk '!a[$0]++' <f q w e r $ รหัสเดิมที่ฉันพบใน internets อ่านได้: awk '!_[$0]++' นี่เป็นสิ่งที่ทำให้ฉันงุนงงมากขึ้นเมื่อฉัน_มีความหมายพิเศษใน awk เช่นใน Perl แต่กลายเป็นชื่อของอาร์เรย์ ตอนนี้ฉันเข้าใจตรรกะเบื้องหลังหนึ่งซับ: แต่ละบรรทัดอินพุตถูกใช้เป็นคีย์ในอาร์เรย์แฮชดังนั้นเมื่อเสร็จสมบูรณ์แฮชจะมีบรรทัดที่ไม่ซ้ำกันตามลำดับการมาถึง สิ่งที่ฉันต้องการเรียนรู้คือสัญกรณ์นี้ตีความโดย awk ได้อย่างไร เช่นความหมายของสัญญาณบาง ( !) และองค์ประกอบอื่น ๆ ของข้อมูลโค้ดนี้ มันทำงานยังไง?

3
ข้าม 6 บรรทัด / แถวแรกในไฟล์ข้อความด้วย awk
ฉันจะข้าม 6 บรรทัด / แถวแรกในไฟล์ข้อความ (input.txt) และประมวลผลส่วนที่เหลือด้วย awk ได้อย่างไร รูปแบบของสคริปต์ awk ของฉัน (program.awk) คือ: BEGIN { } { process here } END { } ไฟล์ข้อความของฉันเป็นดังนี้: 0 3 5 0.1 4.3 2.0 1.5 1.5 3.0 0.3 3.3 1.5 2.1 . . . ฉันต้องการประมวลผลไฟล์เริ่มต้นจาก: 0.3 3.3 1.5 2.1 . . .
39 awk  gawk 


9
คุณจะรวมบรรทัดทั้งหมดที่ลงท้ายด้วยอักขระเครื่องหมายทับขวาได้อย่างไร
การใช้เครื่องมือบรรทัดคำสั่งทั่วไปเช่น sed หรือ awk เป็นไปได้หรือไม่ที่จะรวมบรรทัดทั้งหมดที่ลงท้ายด้วยอักขระที่กำหนดเช่นแบ็กสแลช? ตัวอย่างเช่นให้ไฟล์: foo bar \ bash \ baz dude \ happy ฉันต้องการเอาท์พุทนี้: foo bar bash baz dude happy

9
จะพิมพ์บรรทัดที่ยาวที่สุดในไฟล์ได้อย่างไร?
ฉันกำลังมองหาวิธีที่ง่ายที่สุดในการพิมพ์บรรทัดที่ยาวที่สุดในไฟล์ ฉันทำ googling แล้วก็แปลกใจที่ไม่สามารถหาคำตอบได้ ฉันมักจะพิมพ์ความยาวของบรรทัดที่ยาวที่สุดในไฟล์ แต่ฉันไม่ทราบวิธีพิมพ์บรรทัดที่ยาวที่สุดจริง ๆ ทุกคนสามารถให้บริการโซลูชั่นในการพิมพ์บรรทัดที่ยาวที่สุดในไฟล์ได้หรือไม่? ขอบคุณล่วงหน้า.
34 bash  awk  filter 

3
ท่อจาก grep ไปยัง awk ไม่ทำงาน
ฉันพยายามที่จะบันทึกไฟล์grepอย่างต่อเนื่องtailและได้nคำจากบรรทัด ไฟล์ตัวอย่าง: $ cat > test.txt <<EOL Beam goes blah John goes hey Beam goes what? John goes forget it Beam goes okay Beam goes bye EOL ^C ตอนนี้ถ้าฉันทำtail: $ tail -f test.txt Beam goes blah John goes hey Beam goes what? John goes forget it Beam goes okay Beam …
34 bash  grep  rhel  awk  tail 

3
วิธีผสานสองไฟล์ตามการจับคู่ของสองคอลัมน์
ฉันชอบ file1: 0 AFFX-SNP-000541 NA 0 AFFX-SNP-002255 NA 1 rs12103 0.6401 1 rs12103_1247494 0.696 1 rs12142199 0.7672 และไฟล์ 2: 0 AFFX-SNP-000541 1 0 AFFX-SNP-002255 1 1 rs12103 0.5596 1 rs12103_1247494 0.5581 1 rs12142199 0.4931 และต้องการไฟล์ 3 เช่นนั้น: 0 AFFX-SNP-000541 NA 1 0 AFFX-SNP-002255 NA 1 1 rs12103 0.6401 0.5596 1 …

4
ลบ n ไบต์แรกของไฟล์
ฉันมีปัญหามากและวิธีแก้ไขทั้งหมดที่ฉันจินตนาการได้นั้นซับซ้อน จากประสบการณ์ UNIX / Linux ของฉันต้องมีวิธีที่ง่าย ฉันต้องการที่จะลบ 31 /foo/ไบต์แรกของแต่ละแฟ้มใน แต่ละไฟล์มีความยาวเพียงพอ ฉันแน่ใจว่าใครบางคนจะส่งมอบวิธีแก้ปัญหาที่ง่ายอย่างเหลือเชื่อให้กับฉันฉันไม่สามารถจินตนาการได้ อาจจะตกใจ

12
วิธีพิมพ์คอลัมน์บางชื่อ?
ฉันมีไฟล์ต่อไปนี้: id name age 1 ed 50 2 joe 70 ฉันต้องการพิมพ์เฉพาะคอลัมน์idและ ageตอนนี้ฉันเพิ่งใช้awk: cat file.tsv | awk '{ print $1, $3 }' อย่างไรก็ตามสิ่งนี้ต้องรู้หมายเลขคอลัมน์ มีวิธีการที่ฉันสามารถใช้ชื่อของคอลัมน์ (ระบุในแถวแรก) แทนหมายเลขคอลัมน์?
32 awk 

10
วิธีแทรกเนื้อหาของไฟล์ลงในไฟล์อื่นก่อนรูปแบบ (เครื่องหมาย)?
File1 เนื้อหา: line1-file1 "1" line2-file1 "2" line3-file1 "3" line4-file1 "4" File2 เนื้อหา: line1-file2 "25" line2-file2 "24" Pointer-file2 "23" line4-file2 "22" line5-file2 "21" หลังจากการดำเนินการของ perl / shell script File2เนื้อหาควรเป็น: line1-file2 "25" line2-file2 "24" line1-file1 "1" line2-file1 "2" line3-file1 "3" line4-file1 "4" Pointer-file2 "23" line4-file2 "22" line5-file2 "21" เช่นวางเนื้อหาFile1ในFile2ก่อนบรรทัดที่มี "ตัวชี้"

5
จะแทนที่เนื้อหาของคอลัมน์ใดคอลัมน์หนึ่งด้วย awk ได้อย่างไร?
รับ: มี 40 คอลัมน์ในการบันทึกเป็น ฉันต้องการแทนที่คอลัมน์ 35 เพื่อให้คอลัมน์ 35 ถูกแทนที่ด้วยเนื้อหาของคอลัมน์ 35 และสัญลักษณ์ "$" สิ่งที่อยู่ในใจคือ: awk '{print $1" "$2" "...$35"$ "$36...$40}' มันใช้งานได้ แต่เพราะมันเป็นไปไม่ได้เมื่อจำนวนคอลัมน์มีขนาดใหญ่เท่ากับ 10k ฉันต้องการวิธีที่ดีกว่าในการทำสิ่งนี้

9
ฉันจะลบบรรทัดแรกและบรรทัดสุดท้ายของไฟล์โดยใช้คำสั่งเชลล์ได้อย่างไร
ฉันมีไฟล์ชื่อElement_queryที่มีผลลัพธ์ของแบบสอบถาม: SQL> select count (*) from element; [Output of the query which I want to keep in my file] SQL> spool off; ฉันต้องการลบบรรทัดที่ 1 และบรรทัดสุดท้ายโดยใช้คำสั่งเชลล์
31 shell  sed  awk  grep  pipe 

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