awk 使用带子字符串的索引

cle*_*hoi 5 linux bash shell awk

我有一个命令来切断绳子。

我想知道Linux“awk”中命令的控制索引的详细信息

我有两个不同的案例。

我想在下面的示例字符串中获取单词“Test”。

1. "Test-01-02-03"    
2. "01-02-03-Test-Ref1-Ref2
Run Code Online (Sandbox Code Playgroud)

第一个我可以得到像

substr('Test-01-02-03',0,index('Test-01-02-03',"-"))
-> Then it will bring result only "test"
Run Code Online (Sandbox Code Playgroud)

第二种情况怎么样,我不确定如何使用索引函数在这种情况下获得测试。

你对 awk 的使用有什么想法吗?

谢谢!

Ed *_*ton 7

这是如何使用 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
Run Code Online (Sandbox Code Playgroud)

但这可能不是解决您实际问题的最佳解决方案。

为了进行比较,以下是如何使用 match() 对 RE 进行等效操作:

$ awk -v tgt="Test" 'match($0,tgt){print substr($0,RSTART,RLENGTH)}' file
Test
Test
Run Code Online (Sandbox Code Playgroud)

如果您喜欢这个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
Run Code Online (Sandbox Code Playgroud)