linux - 在命令输出中处理空列时获取第 6 列
问题描述
尝试从输出中获取第一个 col 值与字符串匹配的行的第 6 列值。代码因空格而中断。
尝试将结果通过管道传输到 awk,但是如何处理空格?
command | awk '$1=="string_to_match" {print $6}
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
tensorflow-123456-111111 asu-bsu-b n1-standard-4 00.111.0.1 00.11.2.345 RUNNING
tensorflow-123456-222222 asu-bsu-b n1-standard-4 True 00.111.0.2 11.11.3.345 RUNNING
我希望通过匹配名称来获得外部 IP。
command | awk '$1=="tensorflow-123456-111111" {print $6}
RUNNING
// Want 00.11.2.345
command | awk '$1=="tensorflow-123456-222222" {print $6}
11.11.3.345
每个字段值都是一个可变长度的字符串。
解决方案
鉴于您更新的问题,对于您的特定情况没有必要,但如果将来有人遇到类似问题 - 通常使用 GNU awk 处理 FIELDWIDTHS 的列标题中没有空格的标题的固定宽度输入数据:
$ cat tst.awk
NR==1 {
nf = split($0,flds,FS,seps)
for (i=1; i<=nf; i++) {
FIELDWIDTHS = (i>1 ? FIELDWIDTHS " " : "") length(flds[i]seps[i])
}
}
{
for (i=1; i<=NF; i++) {
val = $i
sub(/\s+$/,"",val)
print NR, i, "<" val ">"
}
print "---"
}
.
$ awk -f tst.awk file
1 1 <NAME>
1 2 <ZONE>
1 3 <MACHINE_TYPE>
1 4 <PREEMPTIBLE>
1 5 <INTERNAL_IP>
1 6 <EXTERNAL_IP>
1 7 <STATUS>
---
2 1 <tensorflow-123456-111111>
2 2 <asu-bsu-b>
2 3 <n1-standard-4>
2 4 <>
2 5 <00.111.0.1>
2 6 <00.11.2.345>
2 7 <RUNNIN>
---
3 1 <tensorflow-123456-222222>
3 2 <asu-bsu-b>
3 3 <n1-standard-4>
3 4 <True>
3 5 <00.111.0.2>
3 6 <11.11.3.345>
3 7 <RUNNIN>
---
推荐阅读
- java - 有没有办法覆盖 Android Room Entities 构造函数?
- asp.net - 调用 GenerateChangePhoneNumberTokenAsync() 后身份电子邮件验证不起作用
- java - 防病毒软件减慢了基于 tomcat 的应用程序
- c# - 如何使同一个 Prefab 实例的行为与我的游戏中的其他实例不同?
- c# - 如何在 Android 和 Wasm 中强制重新计算 NavigationView?
- excel - vba疑难解答使用VBProject.VBComponents调用宏
- python-3.x - 是否可以使用 Python3 制作卸载软件?
- python - 如何使用另一个字典作为 Python 中的键来过滤字典?
- google-cloud-platform - Stackdriver 未能根据自定义指标创建警报
- python - 是否有使用相应的脚本 Python 自动旋转 .STEP 文件的解决方案?