我有一个命令来剪切字符串。

我想知道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

10-07 19:38
查看更多