ใน Bash ฉันต้องการรับคำที่ N ของสตริงโดยตัวแปร
ตัวอย่างเช่น:
STRING="one two three four"
N=3
ผลลัพธ์:
"three"
คำสั่ง / สคริปต์ Bash สามารถทำสิ่งนี้ได้อย่างไร
ใน Bash ฉันต้องการรับคำที่ N ของสตริงโดยตัวแปร
ตัวอย่างเช่น:
STRING="one two three four"
N=3
ผลลัพธ์:
"three"
คำสั่ง / สคริปต์ Bash สามารถทำสิ่งนี้ได้อย่างไร
คำตอบ:
echo $STRING | cut -d " " -f $N
ทางเลือก
N=3
STRING="one two three four"
arr=($STRING)
echo ${arr[N-1]}
IFS
(ตัวคั่นฟิลด์ภายใน) เป็น ':' หรือบางอย่างแทนที่จะเป็นช่องว่างให้เปลี่ยนกลับก่อนที่จะลองสิ่งนี้
การใช้ awk
echo $STRING | awk -v N=$N '{print $N}'
ทดสอบ
% N=3
% STRING="one two three four"
% echo $STRING | awk -v N=$N '{print $N}'
three
ไฟล์ที่มีคำสั่งบางส่วน:
cat test.txt
ผลลัพธ์ :
This is the 1st Statement
This is the 2nd Statement
This is the 3rd Statement
This is the 4th Statement
This is the 5th Statement
ดังนั้นในการพิมพ์คำที่ 4 ของคำสั่งนี้ให้พิมพ์:
cat test.txt |awk '{print $4}'
เอาท์พุต:
1st
2nd
3rd
4th
5th
ไม่มีส้อมราคาแพงไม่มีท่อไม่มีการทุบตี:
$ set -- $STRING
$ eval echo \${$N}
three
แต่ระวัง globbing
STRING=(one two three four)
echo "${STRING[n]}"