`
wx1569466809
  • 浏览: 72156 次
文章分类
社区版块
存档分类
最新评论

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

转载于:https://my.oschina.net/1995blog/blog/1593434

分享到:
评论

相关推荐

    shell中常见命令与awk,sed的等价命令

    ### shell中常见命令与awk, sed的等价命令详解 #### 一、基本概念与工具简介 在Linux或Unix环境中,shell脚本是自动化任务处理的重要手段之一。shell提供了丰富的命令来实现各种功能,而`awk`和`sede`则是其中两个...

    Shell、awk、sed面试题汇总(无答案).doc

    20. 数字字符串处理:可以使用 shell 命令来处理数字字符串,例如 `echo "zdfgrABd2d235d" | grep -o '[0-9]' | paste -sd ''`。 这些知识点涵盖了 Shell、awk 和 sed 命令的使用、变量赋值和取值、文件操作、权限...

    Sed、Awk 与 Linux 等价命令代码鉴赏

    在Linux系统中,`Sed`...以上就是`Sed`和`Awk`在某些场景下替代Linux其他命令的方法。它们提供了强大的文本处理能力,可以根据具体需求灵活应用。通过熟练掌握这些技巧,可以更加高效地处理Linux系统中的文本数据。

    Linux相关命令详解

    这个资源摘要信息主要介绍了 Linux 相关命令的详解,包括文本处理工具 awk、sed、grep、sort、uniq、cut、paste、join 等的语法规则、常用选项和示例应用。 awk 命令是Pattern Scanning and Processing Language,...

    Linux学习笔记【博文整理系列】

    Linux笔记——命令:awk Linux笔记——命令:sed Linux笔记——命令:grep Linux笔记——命令:find Linux笔记——命令:Sort,uniq,join,cut,paste,split Linux笔记——shell基础:变量&本地变量&位置变量&特定变量...

    linux数据抽取命令

    ### Linux 数据抽取命令详解 #### 一、正则表达式(Regular Expressions) 正则表达式是用于在文件中定位特定文本模式的强大工具。在Linux环境下,正则表达式的使用非常广泛,尤其是在处理文本文件时。 - **基本...

    shell编程和unix命令

    这一部分详尽地阐述了各种Unix命令,包括文件和目录操作(如ls、cd、mv、cp)、文本处理(如cat、more、less、grep、sed、awk)、进程管理(如ps、kill、nohup)以及系统信息查询(如who、uname、top)。这些命令是...

    Linux_常用命令全集[文字版]

    - 文本处理命令:如grep, sed, awk, sort, uniq, cut, paste等; - 系统管理命令:如ps, top, df, du, free, vmstat等; - 网络通信命令:如ifconfig, netstat, ssh, ftp, telnet等; - 磁盘管理命令:如fdisk, ...

    学习Linux---不得不知的Linux命令

    `paste` 命令用于将多个文件的内容按列合并到一起。例如: ``` paste file1 file2 &gt; combined_file ``` #### 26. cat - 显示文件内容 `cat` 命令用于显示文件内容。其他用于显示文件内容的命令还包括 `less` 和 `...

    Shell 入门实战到精通

    * paste 命令:用于文本数据合并 * tee 命令:用于数据输出 * xargs 命令:用于数据处理 三剑客命令包括: * grep 命令:用于字符串检索 * sed 命令:用于文本流编辑 * awk 命令:用于数据处理和文本处理 Shell ...

    Mac上终端命令大全[借鉴].pdf

    * awk:在文件中查找并处理模式 * sort:排序或归并文件 * uniq:去掉文件中的重复行 * comm:显示两有序文件的公共和非公共行 * wc:统计文件的字符数、词数和行数 * nl:给文件加上行号 这些命令可以帮助用户快速...

    linux必学的60个命令

    通过阅读提供的“Linux必学的60个命令v1.0.1.pdf”文件,你可以深入理解每个命令的用法和应用场景。同时,标签中的“源码”和“工具”提示了这份资料可能也涉及到使用这些命令处理源代码文件和工具的场景。虽然提供...

    Linux命令文档

    4. **四个强大的UNIX工具**:find、grep、sed、awk,这些工具被广泛应用于文本搜索与处理。 #### 二、常用Linux命令详解 ##### 2.1 命令的格式 - **一般Linux命令的格式**:`command [–options] [arguments]` -...

    Linux命令高阶参考手册,1527页的命令大全

    2. **命令篇**:这是本书的核心部分,详细介绍了各种Linux命令的用法、参数含义、实际应用场景等。 3. **高级篇**:探讨了Linux系统管理、网络配置、安全设置等方面的高级话题。 4. **附录**:提供了一些有用的补充...

    unix text processing

    Unix 的文本处理工具主要包括编辑器(如 `vi` 和 `emacs`)、过滤器(如 `grep` 和 `awk`)以及各种用于格式化和转换文本文件的实用程序。 ### Unix 文本处理中的核心工具 #### 1. **grep** `grep` 是一个用于搜索...

    Unix命令大全

    `cut` 命令用于切割文件的特定部分,如 `cut -c2 myfile.txt` 将删除 `myfile.txt` 文件中的第二列字符,配合 `paste` 命令可以实现数据的重组和分析。 #### 19. date `date` 命令显示或设置系统时间,如 `date` ...

Global site tag (gtag.js) - Google Analytics