开发者

shell脚本两个文件关键行合并方式

目录
  • shell脚本两个文件关键行合并
    • 1.写作意图
    • 2.shell按行读取文件信息
    • 3.提取每行第3列的信息
    • 4.在另一个文件B中查找关键字key
    • 5.字符串非空判断输出
    • 6.关键字key所在的文件A的行内容与KxYVpQP所在的文件B行内容合并显示
  • shell将多行合并成一行的小技巧
    • 主要借助于tr命令
  • 总结

    shell脚本两个文件关键行合并

    1.写作意图

    有两个文件,分别是文件A和文件B。

    指定A文件的某些行,并提取关键字key,然后在B文件中查找关键字key所在的行,并把A文件中关键字key所在的行与B文件关键字key所在的行合并起来写到文件C中.这样的小功能如果用C/C++写将变得复杂,那么有没有什么简介的方式呢?

    答案是肯定的.linux下php的shell scripts提供十分强大的功能.可以通过自带的各种命令小工具cat\grep\cut\awk\tail等等,然后通过管道方式拼接,最后通过shell脚本就可以完成很强大的文本信息搜集与分析功能.

    话不多说,仅仅把自己会的贡献出来.

    2.shell按行读取文件信息

    我们从文件decoders的11行开始读取每行的字符串信息,并将其保存到shell的变量linehttp://www.devze.com中.

    #!/bin/bash
    cat decoders|tail -n +11|while read line
    do
    	echo $line
    done

    通过上面的程序,就可以获取文件decoders的每行数据,并将其保存在变量line中,简单的测试一下,果然从11行开始打印.

    shell脚本两个文件关键行合并方式

    3.提取每行第3列的信息

    对于上面的程序增强一下功能,提取第3列的关键字并打印,如012v\4xm这样的关键字.这里就再次将变量的值通过标准输入流送给cut命令,让该命令完成分割提取工作.最后将提取的结果保存在变量line1中

    #!/bin/bash
    cat decoders|tail -n +11|while read line
    do
    	line1=`echo $line|cut -d " " -f 3`
    	echo $line1
    done

    shell脚本两个文件关键行合并方式

    "|"是管道命令,echo $line将标准输出结果送到cut指令中进行处理,cut -d " " -f 3表示按照空格分割字符串line,并提取第3列的字符串到变量line1中。小小的shell命令,经过管道拼接,真是强大。

    4.在另一个文件B中查找关键字key

    通过上面的两个步骤,就提取到了关键字line,那么接下来从文件MAINTAINERS中查找关键字line,并将所在的行打印出来。

    #!/bin/bash
    cat decoders|tail -n +11|while read line
    do
    	line1=`echo $line|cut -d " " -f 3`
    	line2=`grep $line1 MAINTAINERS`
    	echo $line2
    done

    shell脚本两个文件关键行合并方式

    这里果然匹配到开发者_Docker关键字4xm所在的行,对于匹配不到的行,将输出空字符串。

    5.字符串非空判断输出

    #!/bin/bash
    cat decoders|tail -n +11|while read line
    do
    	line1=`echo $line|cut -d " " -f 3`
    	line2=`grep $line1 MAINTAINERS`
    if [ -n "$line2"编程客栈 ];then
    	echo $line2
    fi
    done

    通过shell的判断语句将非空的结果打印出来

    shell脚本两个文件关键行合并方式

    6.关键字key所在的文件A的行内容与所在的文件B行内容合并显示

    #!/bin/bash
    cat decoders|tail -n +11|while read line
    do
    	line1=`echo $line|cut -d " " -f 3`
    	line2=`grep $line1 MAINTAINERS`
    if [ -n "$line2" ];then
    	echo $line
    	echo $line2
    fi
    done

    shell脚本两个文件关键行合并方式

    到此,一个看似复杂的功能,通过shell就轻松的搞定.

    最后通过sh test.sh>C.log输出流重定向到C文件中,C文件保存了合并的结果

    shell将多行合并成一行的小技巧

    Shell中将多行合并成一行的小技巧,其实很简单: 每行的结尾符为\n,只要将每行的\n换成想要的分隔符,就可以达到目的了。 

    javascript要借助于tr命令

    [root@host ~]# cat data
    127.0.0.1
    127.0.0.2
    127.0.0.3
    127.0.0.4
    [root@host ~]# cat data | tr '\n' '|'    # 行间以|来分隔
    127.0.0.1|127.0.0.2|127.0.0.3|127.0.0.4

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新运维

    运维排行榜