我想编写一个有点长的 awk 程序,从而使我的代码更具可读性且更易于维护。第一个代码片段可以工作,但难以阅读且难以维护。
/\(..-av-es\/.*\)/ {
split($0, arr, /\(..-av-es\/.*\)/)
}
Run Code Online (Sandbox Code Playgroud)
因此,我想在变量内部定义正则表达式并使用该变量。
$0 ~ PATTERN {...}有效但 split($0, arr, PATTERN)无效。我到底做错了什么?
BEGIN { PATTERN="\(..-av-es\/.*\)"}
$0 ~ PATTERN {
split($0, arr, PATTERN)
}
Run Code Online (Sandbox Code Playgroud)
编辑:我有一个这样结构的文件。
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
abc (fd-av-es/key1) value1sdfsdaff
jjjjjjjjjjjjjjjjjjjjjjjjjjj
(sd-av-es/key2) value2sdfsdaff
Run Code Online (Sandbox Code Playgroud)
我的最终目标是拥有一个字符串数组"key1:value1" "key2:value2"
这个片段
/\(..-av-es\/.*\)/ {
split($0, arr, /\(..-av-es\/.*\)/)
for ( i in arr) {print NR arr[i]}
}
Run Code Online (Sandbox Code Playgroud)
return 让我更接近 value1 和 value2
2abc
2 value1afjskhslakjhf
4
4 value2jkalshfkjkl
Run Code Online (Sandbox Code Playgroud)
但
BEGIN { PATTERN="\(..-av-es\/.*\)"}
$0 ~ ES_PATTERN {
split($0, arr, ES_PATTERN)
for ( …Run Code Online (Sandbox Code Playgroud) awk ×1