我有一个命令来剪切字符串。
我想知道Linux“awk”中命令控制索引的细节
我有两种不同的情况。
我想在下面的示例字符串中得到单词“Test”。
1. "Test-01-02-03"
2. "01-02-03-Test-Ref1-Ref2
我可以得到的第一个
substr('Test-01-02-03',0,index('Test-01-02-03',"-"))
-> Then it will bring result only "test"
第二种情况如何呢?我不确定在这种情况下如何使用索引函数获得Test。
您对使用awk有任何想法吗?
谢谢!
最佳答案
这是使用index()查找/打印子字符串的方法:
$ cat file
Test-01-02-03
01-02-03-Test-Ref1-Ref2
$ awk -v tgt="Test" 's=index($0,tgt){print substr($0,s,length(tgt))}' file
Test
Test
但这可能不是解决您实际问题的最佳解决方案。
为了进行比较,以下是对RE使用match()做等效操作的方法:
$ awk -v tgt="Test" 'match($0,tgt){print substr($0,RSTART,RLENGTH)}' file
Test
Test
如果您喜欢
match()
的提要,请按照以下方法编写自己的函数以对字符串执行操作:awk -v tgt="Test" '
function strmatch(source,target) {
SSTART = index(source,target)
SLENGTH = length(target)
return SSTART
}
strmatch($0,tgt){print substr($0,SSTART,SLENGTH)}
' file