[英]How to match anything before and after a pattern in awk?
以下awk
代碼在file.csv
的第二列中搜索$find
,並輸出在第一條匹配行的第一列中找到的數據:
awk -v pattern="$find" '$2 ~ pattern { print $1; exit }' file.csv
例如,給定file.csv
:
1,panda
2,zebra
3,bobcat
4,lion
5,cat
如果$find
設置為“ cat”,則打印“ 5”。
這似乎只匹配單元格的全部內容,類似於grep
^cat$
。
我該如何調整它,使它發現文本第一次出現在單元格中的某處,例如,如果$find
設置為“ cat”,它將打印“ 3”,因為“ bobcat”包含單詞“ cat”。 換句話說,如果不匹配CSV中的整個單元格,則只要在該單元格中的某處找到匹配項就足夠了。
我嘗試了以下方法,但是它們沒有按預期工作:
awk -v pattern="*$find*" '$2 ~ pattern { print $1; exit }' file.csv
在AWK語言編程-正則表達式中 ,我找不到在awk
前后匹配任何內容的指令。
不應該這樣 您正在使用一個csv
文件,並沒有設置字段分隔符,
。
這是您期望的輸出:
$ cat file.csv
1,panda
2,zebra
3,bobcat
4,lion
5,cat
$ find=cat
$ awk -F, -v pattern="$find" '$2 ~ pattern { print $1; exit }' file.csv
3
對於完全匹配,請使用==
代替~
。
$ awk -F, -v pattern="$find" '$2==pattern { print $1; exit }' file.csv
5
除了JS解釋的內容外,對於搜索字符串可能包含特殊正則表達式字符的情況,還有另一種以非正則表達式方式執行此搜索的方法是使用index
函數:
find='cat'
awk -F, -v pattern="$find" 'index($2, pattern) { print $1; exit }' file.csv
3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.