自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AWK 進(jìn)階教程:學(xué)習(xí)如何使用 AWK index 函數(shù)查找子字符串!

開(kāi)發(fā)
AWK 的 index 函數(shù)是處理字符串時(shí)的一個(gè)重要工具。通過(guò)學(xué)習(xí)如何使用它,你可以在文本處理中更高效地查找和操作子字符串。

AWK中的 index函數(shù)讓你可以在字符串中找到子字符串首次出現(xiàn)的位置。

在本教程中,我們將深入探討 AWK``index函數(shù)的方方面面。首先,我們會(huì)介紹它的語(yǔ)法和基本用法,隨后討論如何處理大小寫敏感性和特殊字符的問(wèn)題。此外,你還將學(xué)會(huì)如何查找字符串中子字符串的多次出現(xiàn)位置。

最后,我們將結(jié)合實(shí)際案例,展示如何利用 AWK index函數(shù)對(duì)用戶輸入進(jìn)行有效驗(yàn)證。通過(guò)這些內(nèi)容,你將全面掌握 index函數(shù)的強(qiáng)大功能及其在文本處理中的實(shí)際應(yīng)用。

語(yǔ)法和用法

語(yǔ)法如下:

index(string, substring)

在這里,string是你要搜索的目標(biāo)文本,而substring則是你要查找的子字符串。該函數(shù)會(huì)返回 substring在string中首次出現(xiàn)的位置。如果子字符串未找到,則返回 0。

舉個(gè)例子,假設(shè)你有一個(gè)名為data.txt的數(shù)據(jù)文件,內(nèi)容如下:

1,John Doe,New York
2,Jane Smith,California
3,Emily Davis,Texas

要在第二行中找到名稱Smith的位置,可以使用awk命令和索引函數(shù):

 awk -F , '{print $2,index($2,"Doe")}' data.txt

執(zhí)行上述命令后,輸出如下圖的結(jié)果:

在此輸出中,該命令打印文件中的每個(gè)名稱以及Doe的位置。

在第二行中,Doe從John Doe中的第6個(gè)位置開(kāi)始,而在其他行中,由于Doe不存在,該函數(shù)返回0。

Index函數(shù)的大小寫敏感性

默認(rèn)情況下,AWK中的 index函數(shù)是區(qū)分大小寫的,也就是說(shuō)它會(huì)區(qū)分大寫字母和小寫字母。

為了解決這個(gè)問(wèn)題,一種常見(jiàn)的做法是使用AWK中的toupper() 或tolower()函數(shù),將字符串和子字符串統(tǒng)一轉(zhuǎn)換為大寫或小寫。這樣可以確保搜索時(shí)忽略字符的大小寫差異。

如果你想以不區(qū)分大小寫的方式查找 doe(小寫)的出現(xiàn)位置,可以將字符串和子字符串都轉(zhuǎn)換為相同的大小寫。

以下是使用 AWK 實(shí)現(xiàn)的方法:

 awk -F, '{print $2, index(tolower($2), "doe")}' data.txt

輸出的結(jié)果如下:

John Doe 6
Jane Smith 0
Emily Davis 0

tolower($2)函數(shù)將名稱轉(zhuǎn)換為小寫,然后索引函數(shù)搜索doe。結(jié)果,John Doe與doe在第6位匹配,盡管大小寫不同。

處理特殊字符

在AWK中,某些字符被視為特殊字符,具有特定的意義。這些字符可以是任何符號(hào),從空格和逗號(hào)到像 @或 #這樣的符號(hào)。

如果這些特殊字符是index函數(shù)搜索模式的一部分,就需要對(duì)它們進(jìn)行轉(zhuǎn)義。轉(zhuǎn)義的方法是在字符前加上反斜杠 (`)`。

讓我們來(lái)看data.txt文件的修改版本作為例子:

1,John Doe#New York
2,Jane Smith@California
3,Emily&Davis,Texas

如果你想找到@的位置,你必須在awk命令中轉(zhuǎn)義這個(gè)字符:

awk -F, '{print $2, index($2, "\@")}' data.txt

輸出的結(jié)果如下:

John Doe#New York 0
Jane Smith@California 11
Emily&Davis 0

在這個(gè)輸出中,索引函數(shù)為第二行返回11,表示@符號(hào)在Jane Smith@California中的位置。@前面的反斜杠確保awk將其視為文字字符,而不是特殊字符。

查找多次出現(xiàn)

要查找多個(gè)匹配項(xiàng),你可以設(shè)置一個(gè)循環(huán),從每次找到的最后一個(gè)匹配項(xiàng)之后的位置繼續(xù)搜索。在每次迭代中,搜索的起始點(diǎn)向前移動(dòng),從而能夠找到字符串中所有的子字符串實(shí)例。

例如,假設(shè)data.txt文件中包含以下條目:

The quick brown fox jumps over the lazy dog. The fox is quick and brown.

你需要找到所有出現(xiàn)過(guò)的fox這個(gè)詞。下面是使用awk的方法:

awk '
{
  line = $0
  search_term = "fox"
  pos = 1
  while (pos > 0) {
    pos = index(line, search_term)
    if (pos > 0) {
      print "Found \"" search_term "\" at position", pos
      line = substr(line, pos + length(search_term))
    }
  }
}
' data.txt

輸出如下結(jié)果:

Found "fox" at position 17
Found "fox" at position 31

在這個(gè)輸出中,awk腳本在位置17和31找到了fox。循環(huán)繼續(xù),直到index返回0,這意味著沒(méi)有找到更多的匹配項(xiàng)。

總結(jié)

AWK 的 index 函數(shù)是處理字符串時(shí)的一個(gè)重要工具。通過(guò)學(xué)習(xí)如何使用它,你可以在文本處理中更高效地查找和操作子字符串。無(wú)論是基礎(chǔ)的子字符串查找,還是處理特殊字符和多個(gè)出現(xiàn),掌握這些技能都將顯著提升你的數(shù)據(jù)處理能力。

責(zé)任編輯:趙寧寧 來(lái)源: 攻城獅成長(zhǎng)日記
相關(guān)推薦

2024-10-09 20:42:26

match字符串函數(shù)

2016-08-10 16:07:08

awkLinux開(kāi)源

2020-08-25 08:56:55

Pythonawk字符串

2016-08-11 09:18:33

awkShellLinux

2016-10-08 20:58:50

awkLinux編寫腳本

2016-07-29 15:13:00

awk文本處理工具編程

2016-08-10 11:19:11

awkLinux開(kāi)源

2016-08-29 20:51:16

awkLinux開(kāi)源

2020-09-07 07:35:03

Grep命令字符串

2022-03-20 10:40:11

Linuxawk 腳本

2010-05-11 13:22:50

Unix awk

2017-12-11 13:50:17

LinuxBash子字符串

2010-05-11 11:29:11

Unix awk

2019-12-03 10:00:19

awkLinux循環(huán)

2010-05-11 10:29:06

Unix awk

2023-11-30 12:03:06

linuxAwk

2010-05-26 15:36:23

MySQL字符串

2010-05-26 15:14:39

MySQL字符串

2023-01-09 09:52:06

Bash字符串

2014-01-02 16:14:10

PostgreSQL字符串
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)