IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

从shell中向awk传递变量实例

懒人运维 2010-03-21 22:52:04 累计浏览 4,586 次
本机暂存

次实例参数传递方法:’”$1″‘(单引号双引号变量双引号单引号)

  • 需求:
#!/bin/sh
for file_name in `ls src`
do
echo ${file_name}
awk -F ";" '{if($4 == ?????) print}' ${file_name} >> list
done;

我要检索src目录中的文件,对每一个文件进行分析,如果文件的第4个字段符合一定条件,比如说,第4个字段是”a123″,则将这些符合条件的记录保存 成另外一个文件;该条件,我想在整个shell脚本的$1参数地方体现。

如上脚本,我现在想在?????处引用该shell脚本的第一个 参数$1,请问,?????该怎么写?

  • 解决办法1:调用’”${1}”‘参数
[root@manifold ~]# ls
anaconda-ks.cfg Desktop install.log install.log.syslog test2.sh test.sh
[root@manifold ~]# cat test.sh
#!/bin/sh
 
for file_name in `ls /root`
do
echo ${file_name}
awk -F ";" '{if($4 == '"${1}"') print}' ${file_name} >> list
done;
 
[root@manifold ~]# cat test2.sh
manifold;manifold2;manifold3;1234;end
[root@manifold ~]# ls
anaconda-ks.cfg Desktop install.log install.log.syslog test2.sh test.sh
[root@manifold ~]# sh test.sh 1234
anaconda-ks.cfg
Desktop
awk: cmd. line:1: fatal: file `Desktop' is a directory
install.log
install.log.syslog
test2.sh
test.sh
[root@manifold ~]# ls
anaconda-ks.cfg Desktop install.log install.log.syslog list test2.sh test.sh
[root@manifold ~]# cat list
manifold;manifold2;manifold3;1234;end
  • 解决办法2:使用Awk -v 参数
$ lf
awkvar* src/
$ cat awkvar
#! /bin/sh
 
files=`ls src/*`
for file_name in ${files}
do
        awk -F ":" -v country=China '{ if($4 == country) print }' ${file_name}
done
 
$ ls src
software.txt    whoiswho.txt
$ cat src/*
Microsoft:Windows:XP:USA
SCO:SCO Open Server:5.0.5:USA
Kingsoft:Power Dict:2006:China
Tongtech:TongLINK/Q:6.3:China
Bill Gates:Micosft:CEO:USA
Liu Chuanzhi:Lenovo:CEO:China
$ ./awkvar
Kingsoft:Power Dict:2006:China
Tongtech:TongLINK/Q:6.3:China
Liu Chuanzhi:Lenovo:CEO:China
  • 实例扩展
#! /bin/sh
 
for f in "`ls src/*`"
do
        awk -F ":" '$4 == "'"$1"'" || $2 == "'"$2"'" { print }' ${f}
 

同分类推荐文章

  1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
  2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
  3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

查看更多 DevOps 文章 →

建议继续学习

  1. Bash的模式和配置文件加载 (累计阅读 24,406)
  2. 28个Unix/Linux的命令行神器 (累计阅读 16,790)
  3. 我常用的主机监控shell脚本 (累计阅读 13,429)
  4. 100个常用的linux命令 (累计阅读 11,606)
  5. Linux命令行里的“瑞士军刀” (累计阅读 11,584)
  6. 每个程序员都应该知道的8个Linux命令 (累计阅读 10,744)
  7. 最受欢迎的10个 Linux 单行命令 (累计阅读 10,129)
  8. Linux date 命令获取某日期的前一天 (累计阅读 9,879)
  9. linux下搜索find命令详解 (累计阅读 9,457)
  10. AWK 简明教程 (累计阅读 9,366)