遇到问题:
现在有两个脚本,我想
将file1中的内容按file2来匹配
[root@154 home]# cat file1
3-1-1 POTV=1,POTA=0,POTP=2
1-4-76 POTV=1,POTA=0,POTP=1
2-1-2 POTV=1,POTA=1,POTP=1
3-1-4 POTV=1,POTA=1,POTP=2
4-1-5 POTV=1,POTA=1,POTP=2
7-1-2 POTV=1,POTA=1,POTP=2
3-1-10 POTV=1,POTA=1,POTP=2
1-1-1 POTV=1,POTA=2,POTP=0

 

[root@154 home]# cat file2
1-1-1
2-1-2
2-1-3
3-1-4
4-1-5

  

相当于grep的精确匹配,不过是用awk实现的
grep -w '1-1-1' file1
实现用for in循环取值,赋予变量
写了一个替换思路用for in循环将匹配内容变为变量,然后匹配替换
for i in `cat file2`
do
awk  '$1==''"'$i'"''{print $0}' file1 >> urfile
done
awk  '$1=='   '"'   $i   '"'    '{print $0}'   file1
这段中单引号是脱义的作用
在awk中精确匹配字符,需要将字符用双引号引用:
即
awk '$1=="1-1-1"{print $0}' test
所以对传递参数要用单引号将双引号脱义让awk识别单引号成对出现是按就近原则来的

  

这里需要注意的是,这里引用的'$1=='   '"'   $i   '"'    '{print $0}'里面不能有空格,不然会发生语法错误

(猜想大概是因为IFS分段原因,awk被分成了几段话,造成语法错误)

[root@154 home]# cat aemployee.txt
101 John Doe,CEO
102 Jason Smith,IT Manager
103 Raj Reddy,Sysadmin
104 Anand Ram,Developer
105 Jane Miller,Sales Manager
[root@154 home]# awk '$1==''"'101'"''{print $0}' aemployee.txt
101 John Doe,CEO
[root@154 home]# awk '$1==' '"'101'"''{print $0}' aemployee.txt
awk: cmd. line:1: $1==
awk: cmd. line:1:     ^ unexpected newline or end of string

  这里就能看出来,应该跟我猜的一样,如果有不对,请大神指点

2017/07/01更新:

之前的方法太蠢了,改进下,因为之前实验失败,所以认为这样是不行的,不过发现好像是之前实验错误:
awk '$1=="'$i'"{print $0}' file1 >> urfile

===================================================================

新需求

其中file1只有270行,
             file2有345行,
             file1的第一列内容都包含在file2中
             这是两个文件的关系
要求:
      我想以file2为样本,将file1第一列匹配file2行进行替换

即file2的第一行为
1-1-1
在file1中存在
1-1-1 POTV=1,POTA=2,POTP=0
然后将file2中内容替换为file1中该行内容(或者添加file1中第二列内容)
即变成以下样子
1-1-1 POTV=1,POTA=2,POTP=0
1-1-2
1-1-3
1-1-4
1-1-5

-------------------------------------------------------------------------

自己编了一个脚本,毕竟没有基础,大神莫笑

脚本1

#!/bin/bashfor i in `cat yrsd`
dos=`awk  '$1==''"'$i'"''{print $0}' test`if [ "$s" == "" ];then echo "$i" >>1elseecho "$s" >>1fi
done

 脚本2

   #!/bin/bashfor i in `cat yrsd`doecho $iif [ -z "$(awk  '$1==''"'$i'"''{print $0}' test)" ];then echo "$i" >>1elseecho "$(awk  '$1==''"'$i'"''{print $0}' test)" >>1fidone

  

既然已经实现了awk替换,那加个判断就能搞定
另外,大神给的方法
awk 'FNR==NR{a[$1]=$2;next}{$2=a[$1];print}' file1 file2

  解释一下这个吧,这是使用了awk的内置变量NF和FNR,利用这两个变量,结合数组,先将需要替换的内容组合放到数组里,供匹配使用;

  再使用了next这个内置函数模块,这样的话就可以达到先将内容放到数组里,然后执行匹配替换。

  这里还有一个精彩的地方,在file2文件里,并没有$2这栏,而在执行的时候使用了不存在的$2;

  开始我也疑惑,后来想到,这是一个类似于赋值的方法,原本不存在$2被赋值为替换的内容;

  打印该列,print后不接参数等同于print $0

使用awk的FNR与NR的区别,利用数组,一条命令搞定
这里的知识点还是挺多的,看我这篇分析吧,讲的更详细
http://www.cnblogs.com/irockcode/p/7044722.html

转载于:https://www.cnblogs.com/irockcode/p/7004004.html

awk中引用shell变量执行替换的脚本相关推荐

  1. sed和awk中使用shell变量

    最近做预料处理,使用bash脚本,需要在脚本的sed和awk使用shell变量以控制循环,出现一些问题后找到解决办法如下: 1.sed使用shell变量  这个比较好办,sed命令中可以用单引号和双引 ...

  2. 如何在awk中引用外部变量

    http://www.unix.com/shell-programming-scripting/167627-use-shell-variable-awk-command.html 期望达到的功能-- ...

  3. php引用shell变量,Linux Shell Bash变量的间接引用 - Powered by PHPWind....

    假设一个变量的值是第二个变量的名字. 那么我们如何从第一个变量中取得第二个变量的值呢? 比如, 如果a=letter_of_alphabet并且letter_of_alphabet=z, 那么我们能够 ...

  4. linux中对shell变量内容的修改和替换

    鸟哥私房菜中,对这一内容的描述,简直让人看不懂,好不容易找来文章可以帮助理解下. linux中对shell变量内容的修改和替换 1.变量内容修改 file=/dir1/dir2/dir3/my.fil ...

  5. python中字符串怎么引用_Python:字符串中引用外部变量的3种方法

    方法一: username=input('username:') age=input('age:') job=input('job:') salary=input('salary') info1='' ...

  6. Awk中调用shell命令

    Awk中调用shell命令 需求 在awk中,有时候需要调用linux系统中命令,如计算字符串的MD5值,并保存下来. 方法参考 call a shell command from inside aw ...

  7. vba调用linux shell,调用命令提示符并通过VBA中的Shell Exec执行命令

    我试图在VBA Excel中使用Shell脚本在命令提示符上执行命令.当我在命令提示符下执行此命令时,它通过打印一个数字作为输出.但是当我在脚本中调用相同的命令时,它不会在消息框中显示此数字.调用命令 ...

  8. 接口测试如何在json中引用mock变量

    在测试接口的时候,有的接口需要测试随机传入大量数据,查看数据库是否正常,但是大量的随机数据全靠自己手写会很慢,而且是通过json传递的数据. 这里我们就可以使用mock生成随机变量,然后在json中引 ...

  9. CMakeList 中引用系统环境变量中的 include 文件,以及 lib 文件

    CMakeList 中引用系统环境变量中的 include 文件,以及 lib 文件. cmake中对环境变量读写都是通过ENV前缀来访问环境变量 $ENV{ZLIB_DIR} 表示系统环境变量ZLI ...

最新文章

  1. java(1)——用notepad++编译java(javac.exe)
  2. java程序设计p75_java语言程序设计实用教程第四讲控制结构.ppt
  3. Linux下将数据文件的指定域读取到shell脚本中
  4. SqlException (0x80131904): 将截断字符串或二进制数据。
  5. Hibernate之二级缓存
  6. 非名校学生如何进入一二线互联网公司
  7. 布隆过滤算法c语言,通过实例解析布隆过滤器工作原理及实例
  8. linux使用RAM_DISK根文件系统基本过程
  9. 程序员必备的 58 个学习网站
  10. S32K1XX系列单片机 ——MCAL 的CAN模块配置
  11. 2011 各大IT公司笔试面试题目
  12. js 判断视频编码格式是不是avc格式的
  13. 群发邮件怎么发很多人?邮件群发软件
  14. 央行下月现场督察“85号文”和“断直连”执行情况
  15. Newcoder wyh数格子
  16. 基于javaweb的crm客户关系管理系统(java+springboot+echarts+freemarker+layui+mysql)
  17. SpringBoot项目通过HotswapAgent实现热部署(JDK1.8)---亲测有效
  18. creo自定义调用零件库_Creo标准零件库和常用件库的定制和设置
  19. 五笔和拼音输入法开发
  20. VS插件(Visual Assist Trial)破解

热门文章

  1. 程序运行提示缺少msvcr110、msvcp110、mfc110.dll等相关文件的解决办法
  2. 无人机自组网通信模块,CV5200远距离WiFi模组,无人机无线通信应用
  3. 聊聊 2020 的 dotnet 各大开源项目仓库的情况
  4. linux sd卡挂载脚本,Linux下实现U盘、SD卡自动挂载功能 .
  5. batchupdate一次多少条合适_汽车机油多少公里换一次比较合适?维修工说出实话...
  6. python爬取淘宝搜索页面+url+图片下载并将信息保存到MySQL数据库中
  7. ZOJ 2316 Matrix Multiplication(思路)
  8. java编程macbook pro_macbook pro 能装C++ JAVA JAVA eclipse这些编程软件吗?
  9. 实时操作系统 rhino
  10. 2022年湖南省临床执业医师考试第一单元内医学免疫学模拟题