awk中使用shell命令_awk引用变量

awk中使用shell命令_awk引用变量awk 系列Part11:如何让 awk 使用 Shell 变量

大家好,又见面了,我是你们的朋友全栈君。

awk 系列:如何让 awk 使用 Shell 变量

当我们编写 shell 脚本时,我们通常会在脚本中包含其它小程序或命令,例如 awk 操作。对于 awk 而言,我们需要找一些将某些值从 shell 传递到 awk 操作中的方法。

我们可以通过在 awk 命令中使用 shell 变量达到目的,在 awk 系列的这一节中,我们将学习如何让 awk 使用 shell 变量,这些变量可能包含我们希望传递给 awk 命令的值。

awk 系列Part11:如何让 awk 使用 Shell 变量

有两种可能的方法可以让 awk 使用 shell 变量:

1. 使用 Shell 引用

让我们用一个示例来演示如何在一条 awk 命令中使用 shell 引用来替代一个 shell 变量。在该示例中,我们希望在文件 /etc/passwd 中搜索一个用户名,过滤并输出用户的账户信息。

因此,我们可以编写一个 test.sh 脚本,内容如下:

#!/bin/bash

### 读取用户名
read -p "请输入用户名:" username

### 在 /etc/passwd 中搜索用户名,然后在屏幕上输出详细信息
cat /etc/passwd | awk "/$username/ "' { print $0 }'

然后,保存文件并退出。

上述 test.sh 脚本中 awk 命令的说明:

cat /etc/passwd | awk "/$username/ "' { print $0 }'

"/$username/ ":该 shell 引用用于在 awk 命令中替换 shell 变量 username 的值。username 的值就是要在文件 /etc/passwd 中搜索的模式。

注意,双引号位于 awk 脚本 '{ print $0 }' 之外。

接下来给脚本添加可执行权限并运行它,操作如下:

$ chmod  +x  test.sh
$ ./text.sh 

运行脚本后,它会提示你输入一个用户名,然后你输入一个合法的用户名并回车。你将会看到来自 /etc/passwd 文件中详细的用户账户信息,如下图所示:

awk 系列Part11:如何让 awk 使用 Shell 变量

在 Password 文件中查找用户名的 shell 脚本

2. 使用 awk 进行变量赋值

和上面介绍的方法相比,该方法更加单,并且更好。考虑上面的示例,我们可以运行一条简单的命令来完成同样的任务。
在该方法中,我们使用 -v 选项将一个 shell 变量的值赋给一个 awk 变量。

首先,创建一个 shell 变量 username,然后给它赋予一个我们希望在 /etc/passwd 文件中搜索的名称。

username="aaronkilik"

然后输入下面的命令并回车:

# cat /etc/passwd | awk -v name="$username" ' $0 ~ name {print $0}'

awk 系列Part11:如何让 awk 使用 Shell 变量

使用 awk 在 Password 文件中查找用户名

上述命令的说明:

  • -v:awk 选项之一,用于声明一个变量
  • username:是 shell 变量
  • name:是 awk 变量

让我们仔细瞧瞧 awk 脚本 ' $0 ~ name {print $0}' 中的 $0 ~ name。还记得么,当我们在 awk 系列第四节中介绍 awk 比较运算符时,value ~ pattern 便是比较运算符之一,它是指:如果 value 匹配了 pattern 则返回 true

cat 命令通过管道传给 awk 的 output($0) 与模式 (aaronkilik) 匹配,该模式即为我们在 /etc/passwd 中搜索的名称,最后,比较操作返回 true。接下来会在屏幕上输出包含用户账户信息的行。

结论

我们已经介绍了 awk 功能的一个重要部分,它能帮助我们在 awk 命令中使用 shell 变量。很多时候,你都会在 shell 脚本中编写小的 awk 程序或命令,因此,你需要清晰地理解如何在 awk 命令中使用 shell 变量。

在 awk 系列的下一个部分,我们将会深入学习 awk 功能的另外一个关键部分,即流程控制语句。所以请继续保持关注,并让我们坚持学习与分享。


via: http://www.tecmint.com/use-shell-script-variable-in-awk/

作者:Aaron Kili
译者:ChrisLeeGit
校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

转载于:https://blog.51cto.com/wutengfei/2402082

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106796.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dota2已连接协调服务器,正在登陆中的解决办法「建议收藏」

    dota2已连接协调服务器,正在登陆中的解决办法「建议收藏」这两天,家里有亲戚过世,暗恋的小姑娘跟别人出去玩了,心情不好,打开dota2,连了好几次都没连上,按网上的说法清除缓存,重启电脑都试过了,不行,后来发现,我是手机开的热点,这里信号不好,换一个信号好的卡就行了,很多关于网络的问题其实都和网速有关,因为网速不合格和断网基本上是同一个问题,所以一般会引起混淆。…

    2022年5月17日
    143
  • python下使用cv2.drawContours填充轮廓颜色「建议收藏」

    你要的答案或许都在这里:小鹏的博客目录在使用cv2.drawContours进行轮廓的颜色填充时要注意一点:(1)颜色填充时:给其传参数的时候,需要搞一个轮廓的list给他,要不会导致颜色填充失败。(2)画轮廓线时:就没必要搞list了,直接contours[i]就可以。python代码:图片:背景为黑色,有很多白色填充的。下面代码是去除图片中自定义面积小的轮廓

    2022年4月14日
    595
  • 关于 RenderControl 的问题

    关于 RenderControl 的问题主要解决RenderControl时提示控件必须放在具有runat=server的窗体标记内”错误的解决方法1,http://www.cnblogs.com/zhangronghua/archive/2008/11/07/951899.html2,http://hi.baidu.com/tyrant8203/blog/item/615d77082777c0960a7b82b6.html…

    2022年7月20日
    15
  • 织梦dede如何去除Power by DedeCms

    织梦dede如何去除Power by DedeCms自从dedecms织梦系统更新到6.7日的版本,底部版权信息调用标签{dede:global.cfg_powerby/}会自动加上织梦官方的链接[Power by DedeCms ],想必很多新用户使用中都想去除这个官方的链接,由于这是官方的作为,本文只是提供一个技术的交流,并不鼓励大家去除底部的链接。好了,回归正题,大家知道,进入后台在后台的系统-系统参数有个网站版权信息,在这里并不能找到官方的

    2022年7月15日
    14
  • LaTeX 参考文献_论文参考文献外文文献格式

    LaTeX 参考文献_论文参考文献外文文献格式这篇好棒,但是代码写在什么位置看下一篇(26条消息)Latex中如何制作参考文献_bluenight专栏-CSDN博客_latex中参考文献https://blog.csdn.net/chl033/article/details/5927207这篇有代码位置(26条消息)Latex引用bib文件步骤_一个人漫步走-CSDN博客【Latex】如何同时引用多篇参考文献_一千零一夜的博客-CSDN博客_latex怎么连续引用多个文献这篇也可以,写了几个细节:1.cite包一定要导入2….

    2025年10月10日
    4
  • easycode mybatis 在线激活码(JetBrains全家桶)[通俗易懂]

    (easycode mybatis 在线激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~L…

    2022年4月1日
    107

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号