【发布时间】:2017-02-06 12:45:20
【问题描述】:
我正在使用以下简单的 grep 和 AWK 命令来匹配 CSV 文件中的主机名和打印 ID。
我的命令:
#!/bin/bash
host=`hostname`
/bin/cat /tmp/MasterInventory.csv | grep -i $host | awk -F, '{print $1}' > /opt/input_appProfile.id
我的 CSV 清单:
Hostname App_ID
SercverTest345 12
Mytestserver01 17
Mytestserver02 19
如果 cmd 搜索 Mytestserver02 它正在打印 App_ID 17 & 19,但实际上它应该只打印 19 按照主机名
请帮我解决这个问题。
【问题讨论】:
-
如果你的csv文件没有逗号,你为什么要写
awk -F,? -
像
awk -v host="Mytestserver01" '$1==host{print $2}' /tmp/MasterInventory.csv这样的东西顺便说一句应该适用于你的情况,但我认为你的问题有很多重复。 -
您的解决方案只会匹配 exact 主机名。他对 grep 的使用似乎表明他也想要部分匹配。因此:
awk -v host="Mytestserver01" '$1~host{print $2}' /tmp/MasterInventory.csv -
您说“我的 CSV”并显示一个不带逗号的文件。您发布的内容是否真的是您的输入文件格式(即它不是 CSV),或者您是否试图向我们展示您认为更易于阅读的 CSV 文件的表示形式? edit 你的问题是要么向我们展示 CSV 文件,要么摆脱说它是 CSV 文件的测试(并说明它的真实含义,例如多空格或制表符分隔或固定宽度字段)