专栏首页阿dai_linuxgrep、awk、paste命令应用 原

grep、awk、paste命令应用 原

扩展:grep(egrep)、awk

grep

  • grep、egrep或awk过滤两个或多个关键词
grep:
[root@adai003 grep]# grep 'root\|daemon' passwd
root:x:0:0:roprot:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

egrep:
[root@adai003 grep]# egrep 'root|daemon' passwd
root:x:0:0:roprot:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

awk:
[root@adai003 grep]# awk '/root|daemon/' passwd
root:x:0:0:roprot:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@adai003 grep]# awk '/root/ || /daemon/ {print}' passwd
root:x:0:0:roprot:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin

awk

  • 用awk编写生成以下结构文件的程序
用awk编写生成以下结构文件的程序:
1,1,0000000001,0000000001,0000000001,0000000001,0000000001,0000000001,2005100110101
2,2,0000000002,0000000002,0000000002,0000000002,0000000002,0000000002,2005100110101
(最后列使用现在的时间,格式为YYYYMMDDHHMISS)各列的值应如下所示,每增加一行便加1,共500万行。

方法1:

[root@adai003 grep]# awk 'BEGIN{for(i=1;i<=5;i++)printf("%d,%d,%010d,%010d,%010d,%010d,%010d,%010d,%d\n",i,i,i,i,i,i,i,i,strftime("%Y%m%d%H%M"))}'
1,1,0000000001,0000000001,0000000001,0000000001,0000000001,0000000001,201707071803
2,2,0000000002,0000000002,0000000002,0000000002,0000000002,0000000002,201707071803
3,3,0000000003,0000000003,0000000003,0000000003,0000000003,0000000003,201707071803
4,4,0000000004,0000000004,0000000004,0000000004,0000000004,0000000004,201707071803
5,5,0000000005,0000000005,0000000005,0000000005,0000000005,0000000005,201707071803

解析:
%d,     %d,     %010d,          %010d,       %010d,         %010d,       %010d,       %010d,            %d
1       1      0000000001     0000000001   0000000001    0000000001    0000000001    0000000001    201407200104

在此定义i为行数,如果要写多几行,就把这里的5改成需要的数字即可,例如:20  {for(i=1;i<=20;i++)

  %010d:    0000000001    刚好10个数字。

方法2:使用shell脚本

#! /bin/bash

for i in `seq 1 5`
  do
    n=`echo "$i"|awk '{print length($0)}'`
    export m=$[10-$n]
    export o=`perl -e '$a='0';$b=$a x $ENV{"m"};print $b;'`
    export j=$i
    p=`perl -e '$c=$ENV{"o"}.$ENV{"j"};print $c;'`
    echo "$i,$i,$p,$p,$p,$p,$p,$p,`date +%Y%m%d%H%M%S`"
  done
注:其中用到了perl,所以脚本整体看起来比较啰嗦,希望能找到更好的解决办法。
PS: shell 执行效率很低,so 该脚本运行时间会很漫长!

或:
#!/bin/bash

for i in `seq 1 5`
  do
    n=`echo $i|awk '{print length($0)}'`
    n_0=$[10-$n]
    c_0=""
    for j in `seq 1 $n_0`
  do
    c_0="$c_0"0""
  done
    echo $i,$i,$c_0$i,$c_0$i,$c_0$i,$c_0$i, $c_0$i,$c_0$i,`date +%Y%m%d%H%M%S`
  done
运行结果同上!
  • awk用print打印单引号
[root@adai003 grep]# awk -F ':' '{print "This is a '"' "'" $1}' passwd |head -3
This is a ' root
This is a ' bin
This is a ' daemon
脱义单引号和空格!

注: 在awk中使用脱义字符‘\’是起不到作用的,如果想打印特殊字符,只能使用 '""' 这样的组合才可以。 这里自左至右为单引号、双引号、双引号、单引号其中两个单引号为一对,两个双引号为一对。想脱义$那就是'"$"'。

paste命令

paste命令用于将多个文件按照列队列进行合并。

语法: paste [options] [filename1] [filename2] Options: -d:指定文件内容之间的分隔符 -s:串列进行而非平行处理(水平显示)

[root@adai003 grep]# paste file1 file2 |cat
1	a
22	bb
333	ccc
4444	dddd
333	ccc
22	bb
1	a

[root@adai003 grep]# paste -d '+' file1 file2 |cat
1+a
22+bb
333+ccc
4444+dddd
333+ccc
22+bb
1+a

[root@adai003 grep]# paste -s file1 file2 |cat
1	22	333	4444	333	22	1
a	bb	ccc	dddd	ccc	bb	a

(adsbygoogle = window.adsbygoogle || []).push({});

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • chmod命令、chown命令、chgrp命令、umask命令、chattr命令、lsattr命令

    语法: chgrp [-R] [组名] filename (-R表示级联更改,只针对目录文件)

    阿dai学长
  • 分发系统——expect 原

    (adsbygoogle = window.adsbygoogle || []).push({});

    阿dai学长
  • awk工具 原

    awk ‘{print $n}’ [filename] 在此n代表数字(当n=0时$0代表文件所有内容,当n=1,2,3...时$1,2,3...代表相应列)

    阿dai学长
  • 查找当前目录下的大于1M的文件的各种实现

    用户3765803
  • 大点干!早点散----------深入剖析GFS分布式文件系统

    Gluster File System,开源的分布式文件系统,是Scale存储的核心,能够处理千数量级的客户端.在传统的解决 方案中Glusterfs能够灵活的...

    不吃小白菜
  • Linux下监控用户操作轨迹

    在实际工作当中,都会碰到误删除、误修改配置文件等事件。如果没有堡垒机,要在linux系统上查看到底谁对配置文件做了误操作,特别是遇到删库跑路的事件,当然可以通过...

    有暗香盈袖
  • elasticsearch集群

    安装elasticsearch集群 hostnameipportes-1128.0.0.1019200es-2128.0.0.1029200 安装jdk [ro...

    零月
  • linux基础命令介绍五:文本过滤 grep

    grep按行检索输入的每一行,如果输入行包含模式PATTERN,则输出这一行。这里的PATTERN是正则表达式(参考前一篇,本文将结合grep一同举例)。

    用户5030870
  • Linux中常见问题(磁盘 定时任务)

    第1章 linux无法上网 1) 第一步,先ping域名. ping www.baidu.com 2)再ping一个公网ip , ping 223.5.5.5...

    惨绿少年
  • BZOJ 2463: [中山市选2009]谁能赢呢?(新生必做的水题)

    2463: [中山市选2009]谁能赢呢? Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2372  So...

    Angel_Kitty

扫码关注云+社区

领取腾讯云代金券