bash - awk gensub 函数使用问题

标签 bash shell awk sed

cat file

^QciProfilePredefined=qci2$ logicalChannelGroupRef QciTable=default,LogicalChannelGroup=2
EUtranCellTDD=.*-1[123456],UeMeasControl=1,ReportConfigA4=1$ a4ThresholdRsrp -140

我想用gensub()删除$1中最后一个逗号之前的内容(也删除逗号),而不影响其他包含逗号的列。

我的代码:

awk '{$1=gensub(/.*,/,"",1);print}' file

输出:

LogicalChannelGroup=2 logicalChannelGroupRef QciTable=default,LogicalChannelGroup=2
ReportConfigA4=1$ a4ThresholdRsrp -140 a4ThresholdRsrp -140

似乎ROW 2的内容被“4ThresholdRsrp -140”重复了。

我期望的输出:

LogicalChannelGroup=2 logicalChannelGroupRef QciTable=default,LogicalChannelGroup=2
ReportConfigA4=1$ a4ThresholdRsrp -140

最佳答案

gensub 有 4 个参数 gensub(regexp, replacement, how [, target])

你忘了提到目标,默认是 $0 但你需要 $1

how 参数用于指定要替换的匹配项,例如:第 2 个匹配项或第 4 个匹配项(如 sed 's///3')以及接受 "g""G" 来指定所有匹配项

awk '{$1=gensub(/.*,/,"",1,$1);print}'


你在这里不需要 gensubsub 将对找到的第一个匹配项进行就地替换。 gsub 将对找到的所有匹配项进行就地替换

awk '{sub(/.*,/,"",$1);print}'

关于bash - awk gensub 函数使用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47652654/

相关文章:

bash - 如何使用 sshpass 命令从远程机器获取退出代码

更改文件

bash 脚本改进

linux - 保留最新的 x 数量的文件删除其余的 bash

linux - 只接受 4 个字符长的十进制数字作为用户输入以供读取

shell - 如何在 sh 中向变量追加换行符?

python - 检查文件夹大小是否大于特定大小的最快方法是什么?

linux - 如何在 Linux 中打印与我的排序结果相关的所有行

bash - 从顶部输出中删除标题

linux - 按另一列的值计算一个列组的值数