Bash 如何使用shell脚本从第二列中选择值?

Bash 如何使用shell脚本从第二列中选择值?,bash,shell,awk,scripting,Bash,Shell,Awk,Scripting,如果我有一个包含以下内容的文本文件: MachineName IPAddress Computer1234 10.0.1.1 Computer1235 10.0.1.2 Computer1236 10.0.1.3 一旦我从计算机中获取MachineName,如何从上面的文本中获取相应的IP地址 (bash?)脚本将在Mac上运行,上面的文本可以重新格式化和/或插入到脚本本身(大约110台计算机).使用grep使其非常简单 grep'Computer1234'text_file

如果我有一个包含以下内容的文本文件:

MachineName    IPAddress
Computer1234   10.0.1.1
Computer1235   10.0.1.2
Computer1236   10.0.1.3
一旦我从计算机中获取MachineName,如何从上面的文本中获取相应的IP地址


(bash?)脚本将在Mac上运行,上面的文本可以重新格式化和/或插入到脚本本身(大约110台计算机).

使用grep使其非常简单

grep'Computer1234'text_file.txt | awk'{print$2}'

但是,我们可以做得更好,只需单独使用awk

awk-v hostname='Computer1234'$1~hostname{print$2}'text_file.txt

-v var_name=
是传递awk变量的方式


$1~ hostname
查看第一个字段是否包含与hostname变量匹配的模式,如果包含,则打印ip

这就是awk的目的:按模式搜索字段,然后执行一些操作。基本思想是

awk '/pattern/ {action}' file
在你的情况下,那就是

awk '/Computer1234/ { print $2 }' file
事实上,您可以更具体地使用通用awk用例

awk 'condition { action }' file


另一方面,将主机名转换为IP地址是名称服务器的工作。如果这不仅仅是玩游戏,而且需要扩展,则应将该数据插入名称服务器的区域文件,然后使用名称服务访问工具(如
dig
)查询地址与主机名关联。

可能awk会更好。我现在无法测试它,但请尝试
awk-v machine=Computer1235'$1==machine{print$2}file.txt
@sircapsalot不是该文件的副本,因为第一列使用变量匹配(否则它没有用)@sircapsalot我不同意:阅读问题:“一旦我得到计算机名,我就想要地址“.你可能是对的@Jean Françoisfare。我会继续发表评论以防万一,并留下我的投票结果。谢谢@EdMorton感谢你的指点,我一直在学习并删除了shell代码段。你甚至不应该显示
grep | awk
反模式。如果你熟悉grep而不熟悉awk,在我看来,显示这两个命令之间的关系没有坏处。
awk '$1 == "Computer1234" { print $2 }' file