awk - awk 在第 n 次出现后插入缩进
问题描述
我正在尝试编辑缩进至关重要的 yaml 文件。下面是输入
spec:
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp
template:
metadata:
annotations:
checksum/config: 2cee4a874d2afd91d92301f15efece5afbca3abc63ba3b2b
checksum/tls-secrets: 649c0580ebbcf3ae194d17b8ac4cc2f1cda33f145da9764
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp
spec:
serviceAccountName: myapp-acc
containers:
- name: myapp-pod
image: "imagerepo"
resources:
requests:
cpu: 500m
memory: 800Mi
我想在 yaml 文件中第 11 次出现的“resources:”和文件中第 1 次出现的“serviceAccountName:”之后插入带有缩进的相应数据。我的意思是无论缩进搜索模式有什么我们可以相应地调整插入文本的缩进资源之后:我想要
limits:
cpu: 500m
memory: 800Mi
服务后AccountName
imagePullSecrets:
- name: imagepullsecret
输出文件
spec:
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp
template:
metadata:
annotations:
checksum/config: 2cee4a874d2afd91d92301f15efece5afbca3abc63ba3b2b
checksum/tls-secrets: 649c0580ebbcf3ae194d17b8ac4cc2f1cda33f145da9764
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp
spec:
serviceAccountName: myapp-acc
imagePullSecrets:
- name: imagepullsecret
containers:
- name: myapp-pod
image: "imagerepo"
resources:
limits:
cpu: 500m
memory: 800Mi
requests:
cpu: 500m
memory: 800Mi
解决方案
$ cat tst.awk
{ print }
sub(/serviceAccountName:.*/,"") && (++cnt1 == 1) {
print $0 "imagePullSecrets:"
print $0 " - name: imagepullsecret"
}
sub(/resources:.*/,"") && (++cnt2 == 11) {
print $0 " limits:"
print $0 " cpu: 500m"
print $0 " memory: 800Mi"
}
$ awk -f tst.awk file
spec:
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp
template:
metadata:
annotations:
checksum/config: 2cee4a874d2afd91d92301f15efece5afbca3abc63ba3b2b
checksum/tls-secrets: 649c0580ebbcf3ae194d17b8ac4cc2f1cda33f145da9764
labels:
app.kubernetes.io/name: myapp
app.kubernetes.io/instance: myapp
spec:
serviceAccountName: myapp-acc
imagePullSecrets:
- name: imagepullsecret
containers:
- name: myapp-pod
image: "imagerepo"
resources:
limits:
cpu: 500m
memory: 800Mi
requests:
cpu: 500m
memory: 800Mi
我最初在提供示例输入上运行代码后添加了++cnt
测试,因为该输入不提供测试该功能的方法。
推荐阅读
- laravel - 补丁方法不允许!有替代的请求方法吗?
- objective-c - 如何使 Objective-C 仅针对构建模块?
- php - PHP Intelephense - 方法与子方法不兼容
- mysql - 在 2 个不同字段中具有相同值的不同值的总和以及在 2 个不同字段中具有不同值的所有值的总和
- web - Odoo - 根据网站字段隐藏网站菜单
- spring-boot - 在模型内部构造一个数组列表
- python - Django - Python 从字典中获取列表返回一个数字而不是列表
- python - 当每个请求都需要时,在 Django 请求中传递参数的推荐方法是什么?
- java - 检查输入的数组并显示错误并且在循环中
- android - 在 android 中使用 Fishbun 库在 gridview 中显示来自画廊的多个图像