复习 扩展

来源:互联网 发布:mysql offset 编辑:程序博客网 时间:2024/06/05 00:18
  1. 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]awkvid2= id -F ':' '1==id2print$2  filename//:awkF  : ′′  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

2 . awk 合并一个文件
需要把两个文件中,第一列相同的行合并到同一行中
这里写图片描述
NR表示读取的行数,FNR表示读取的当前行数
NR==FNR就是读取2.txt的时候。那么NR>FNR表示读取1.txt的时候,数组a其实就相当于一个map

3 . 把一个文件多行连接成一行
a=cat file;echo a   
awk ‘{printf(“%s “,
0)}’ file // %s 后记得要有一空格,否则出来就是完全连在一起的,中间连空格都没有
cat file |xargs

4 . awk中gsub函数的使用
awk ‘gsub(/www/,”abc”)’ /etc/passwd // passwd文件中把所有www替换为abc
awk -F ‘:’ ‘gsub(/www/,”abc”,1)print$0  /etc/passwd// 1中的www为abc

5 .把两个文件中相同的行合并成一行
格式为:paste filename1 filename2
这里写图片描述

如果,你想在两个文件连接处用一个指定的字符连接,还可以用-d来指定
paste -d ‘+’ filename1 filename2
这里写图片描述

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


原创粉丝点击