专栏首页运维小白linux基础(day30)

linux基础(day30)

awk复习

awk 中使用外部shell变量

  • awk 中使用外部shell变量
A=44echo "ABCD" | awk -v GET_A=$A ’{print GET_A}’
说明:-v选项用于定义参数,这里表示将变量A的值赋予GET_A。
有多少个变量需要赋值,就需要多少个-v选项。与之等价的:应用于脚本中:

#! /bin/bash
sort -n filename |awk -F ':' '{print $1}'|uniq >id.txt
for id in `cat id.txt`; do
        echo "[$id]"
        awk -v id2=$id -F ':' '$1==id2 {print $2}' filename  // 另外的方式为: awk -F ':' '$1=="'id'" {print $2}' filename  
done
附件:
cat filename
1111111:13443253456
2222222:13211222122
1111111:13643543544
3333333:12341243123
2222222:12123123123

运行脚本后结果为:
[1111111]
13443253456
13643543544
[2222222]
13211222122
12123123123
[3333333]
12341243123


思路:
先创建一个后缀为 .sh 的文件,然后将内容,添加进入,并将其中failname改为你创建的 后缀为 .sh 的文件
然后去执行shell文件——>sh 加 文件,即可看到结果

awk 合并一个文件

把一个文件多行连接成一行

awk中gsub函数的使用

  • awk 'gsub(/root/,"1111")' test.txt //把文件中所有的root替换为1111
  • awk -F ':' 'gsub(/root/,"lll",$1) {print $0}' test.txt //把$1 中的root替换为lll
    • 若这里不加 -F ':' 指定分隔符,得到的结果不同
[root@hf-01 awk]# awk 'gsub(/root/,"1111")' test.txt    //把文件中所有的root替换为1111
1111x:0:0:1111:/1111:/bin/bash
operator:x:11:0:operator:/1111:/sbin/nologin
[root@hf-01 awk]# awk -F ':' 'gsub(/root/,"lll",$1) {print $0}' test.txt    //把$1 中的root替换为lll
lllx 0 0 root /root /bin/bash

在不加-F ':' 指定分隔符,得到的结果不同
[root@hf-01 awk]# awk 'gsub(/root/,"AAA",$1) {print $0}' test.txt
AAAx:0:0:AAA:/AAA:/bin/bash
operator:x:11:0:operator:/AAA:/sbin/nologin

awk 截取指定多个域为一行

过滤两个或多个关键词

  • grep 或 egrep 或awk 过滤两个或多个关键词
grep -E '123|abc' filename  // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename    //用egrep同样可以实现
awk '/123|abc/'  filename // awk 的实现方式

用awk生成以下结构文件

awk用print打印单引号

  • 方法一:
  • head -3 |awk '{print "This is a '"'"'"$1}' test.txt //在前3行中,添加字符" This is a '
    • 脱义的单引号字符 表达式为 ' " ' " '
  • 方法二:
  • head -2 test.txt |awk '{print"11'''" $1}' //在前2行中,添加字符11 '
    • 脱义单引号字符表达式为 " ' ' ' "
  • 添加双引号字符
  • head -2 test.txt |awk '{print"aaa"" $1}' //在前2行中,添加字符aaa "
    • 脱义双引号字符表达式为 " " "
单引号
方法一:
[root@localhost ~]# head -3 |awk '{print "This is a '"'"'"$1}' test.txt    //在前3行中,添加字符" This is a '
This is a 'root:x:0:0:root:/root:/bin/bash
This is a '&&&
This is a 'as***fsdf****

方法二
[root@localhost ~]# head -2 test.txt |awk '{print"11'\''" $1}'    //在前2行中,添加字符11 '
11'root:x:0:0:root:/root:/bin/bash
11'&&&

双引号
[root@localhost ~]# head -2 test.txt |awk '{print"aaa\"" $1}'    //在前2行中,添加字符aaa "
aaa"root:x:0:0:root:/root:/bin/bash
aaa"&&&

sed中添加单引号 '

  • head -2 test.txt|sed 's/(.*)/this '"'"'&/'g //在前2行中,添加字符11 '
    • 脱义单引号字符为 ' " ' " '
[root@localhost ~]# head -2 test.txt|sed 's/\(.*\)/11 '"'"'&/'g
11 'root:x:0:0:root:/root:/bin/bash
11 '&&&

总结

  • 在awk中脱义单引号字符有两种方法
      1. 脱义的单引号字符 表达式为 ' " ' " '
      1. 脱义单引号字符表达式为 " ' ' ' "
  • 在awk中脱义双引号字符方法
    • 脱义双引号字符表达式为 " " "

合并两个文件

  • paste 命令,将多个文件按照列队列进行合并
    • 格式:paste filename1 filename2 //将两个文件中相同的行合并到一行
    • -d 在两个文件连接处用一个 指定的字符 连接
  • paste 2.txt 3.txt //将2和3文件中相同的行合并到一行
[root@hf-01 ~]# cat 2.txt
a v c
1 f g
as 4 5a
dd && a.
1 2
[root@hf-01 ~]# cat 3.txt
aa a 6
13 f45
1 f fg 
abc 6a2 asf 4fa
cda
abc
1
[root@hf-01 ~]# paste 2.txt 3.txt    //将2和3文件中相同的行合并到一行
a v c	aa a 6
1 f g	13 f45
as 4 5a	1 f fg 
dd && a.	abc 6a2 asf 4fa
1 2	cda
	abc
	1
[root@hf-01 ~]# paste -d '+' 2.txt 3.txt    //把文件2和3合并到一行中,并用+ 号字符连接
a v c+aa a 6
1 f g+13 f45
as 4 5a+1 f fg 
dd && a.+abc 6a2 asf 4fa
1 2+cda
+abc
+1
[root@hf-01 ~]# 

awk的参考教程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux基础(day28)

    9.6 awk(上) awk工具 head -n2 test.txt|awk -F ':' '{print $1}' head -n2 test.txt|awk...

    运维小白
  • 14.4 exportfs命令

    exportfs命令 常用选项 -a 全部挂载或者全部卸载 -r 重新挂载 -u 卸载某一个目录 -v 显示共享目录 以下操作在服务端上 -vim /etc/e...

    运维小白
  • 4.2 du命令

    du命令 du命令,查看文件的大小 du命令用法 du -sh 目录/文件命令用法 du -sh 目录/文件 查看目录或文件的大小 [root@localh...

    运维小白
  • AWK常用技巧

    awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确...

    惨绿少年
  • 一篇搞懂MySQL 8.0 Clone技术在线搭建主从复制全过程

    墨墨导读:MySQL从8.0.17开始新增了克隆Clone技术,可以在线进行MySQL的本地克隆或远程克隆,从此搭建从库可以不再需要备份工具来实现了,本文分享C...

    数据和云
  • 002_第一部分_[字典 / 列表解析

    定义字典: d = {} d = dict() d = {"a":1, "b":2}

    py3study
  • 【4】通过简化的正则表达式处理字符串

    阅读目录 常见字符串操作 使用正则表达式处理字符串 “前后限定”查找目标 自动处理转义字符 界定串的通用化 多个目标的匹配 进一步扩展 结论 在...

    用户1075292
  • Nodejs+socket.io搭建WebRTC信令服务器

    我们在学习 WebRTC 时,首先要把实验环境搭建好,这样我们就可以在上面做各种实验了。

    音视频_李超
  • 关于知识蒸馏,这三篇论文详解不可错过

    导语:继《从Hinton开山之作开始,谈知识蒸馏的最新进展》之后,作者对知识蒸馏相关重要进行了更加全面的总结。在上一篇文章中主要介绍了attention tra...

    AI科技大本营
  • 不是吧,阿Sir,MySQL约束你竟然还不懂!

    符号规定:下面展示一些定义的时候,为简便理解,使用中文配合符号表述(会有具体举例,不用担心理解不了)

    BWH_Steven

扫码关注云+社区

领取腾讯云代金券