ในการแยกสตริงเป็นอาร์เรย์ในawk
เราใช้ฟังก์ชันsplit()
:
awk '{split($0, a, ":")}'
# ^^ ^ ^^^
# | | |
# string | delimiter
# |
# array to store the pieces
หากไม่ได้รับตัวคั่นจะใช้การFS
ซึ่งเป็นค่าเริ่มต้นไปยังพื้นที่:
$ awk '{split($0, a); print a[2]}' <<< "a:b c:d e"
c:d
เราสามารถให้ตัวแยกตัวอย่างเช่น:
:
$ awk '{split($0, a, ":"); print a[2]}' <<< "a:b c:d e"
b c
ซึ่งเทียบเท่ากับการตั้งค่าผ่านFS
:
$ awk -F: '{split($0, a); print a[1]}' <<< "a:b c:d e"
b c
ในเพ่งพิศคุณยังสามารถให้ตัวแยกเป็น regexp:
$ awk '{split($0, a, ":*"); print a[2]}' <<< "a:::b c::d e" #note multiple :
b c
และยังเห็นสิ่งที่ตัวคั่นอยู่บนทุกขั้นตอนโดยใช้พารามิเตอร์ตัวที่สี่:
$ awk '{split($0, a, ":*", sep); print a[2]; print sep[1]}' <<< "a:::b c::d e"
b c
:::
ลองอ้างหน้า man ของ GNU awk :
แยก (สตริง, อาร์เรย์ [, fieldep [, seps]])
แบ่งสตริงออกเป็นชิ้น ๆ โดยคั่นด้วยfieldepและเก็บชิ้นส่วนในอาร์เรย์และสตริงตัวคั่นในอาร์เรย์seps ชิ้นแรกจะถูกเก็บไว้ในarray[1]
ชิ้นที่สองในarray[2]
และอื่น ๆ ค่าสตริงของอาร์กิวเมนต์ที่สามคือfieldepเป็น regexp อธิบายตำแหน่งที่จะแยกสตริง (มากFSสามารถเป็น regexp อธิบายที่จะแยกบันทึกอินพุต) หากfieldsepถูกละไว้ค่าของFSถูกนำมาใช้ ส่งคืนจำนวนองค์ประกอบที่สร้างขึ้น sepsเป็นส่วนขยายโดยเป็นสตริงตัวคั่นระหว่างและ ถ้าfieldepเป็นช่องว่างเดียวช่องว่างนำหน้าใด ๆ จะเข้าสู่และช่องว่างต่อท้ายใด ๆ ก็ตามที่เข้ามาโดยที่nคือค่าส่งคืนของsplit()
gawk
seps[i]
array[i]
array[i+1]
seps[0]
seps[n]
split()
(เช่นจำนวนองค์ประกอบในอาร์เรย์)
OFS
ให้ใช้เครื่องหมายจุลภาคคั่นระหว่างพวกเขาทำให้print
เห็นว่าพวกเขาเป็นอาร์กิวเมนต์แยกต่างหาก