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

 更新时间:2023年05月08日 14:43:19   作者:111尽力而为  
这篇文章主要介绍了shell脚本两个文件关键行合并方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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

1.写作意图

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

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

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

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

2.shell按行读取文件信息

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

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

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

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

"|"是管道命令,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

这里果然匹配到关键字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的判断语句将非空的结果打印出来

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就轻松的搞定.

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

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

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

主要借助于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

总结

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

相关文章

  • 查看Linux系统重启的四种基本命令详解

    查看Linux系统重启的四种基本命令详解

    Linux 重启命令是指在Linux系统中,通过指定命令来启动或重启系统,在日常使用中,我们经常需要对系统进行重启操作,如更新软件、修改系统配置等,因此,熟练掌握Linux重启命令是非常必要的,所以本文给大家介绍了查看Linux系统重启的四种基本命令,需要的朋友可以参考下
    2024-04-04
  • linux rsync同步命令(值得收藏)

    linux rsync同步命令(值得收藏)

    本文给大家介绍linux 同步利器rsync,今天给大家介绍我从这个工具中看到的同步艺术,感兴趣的朋友一起通过本文学习吧
    2015-11-11
  • Linux下查看内存使用情况的方法总结

    Linux下查看内存使用情况的方法总结

    在做Linux系统优化的时候,物理内存是其中最重要的一方面,自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况,下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法,需要的朋友可以参考下
    2024-01-01
  • shell实现Fisher–Yates shuffle洗牌算法介绍

    shell实现Fisher–Yates shuffle洗牌算法介绍

    大家好,本篇文章主要讲的是shell实现Fisher–Yates shuffle洗牌算法介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下哦
    2021-11-11
  • linux获取系统启动时间示例详解

    linux获取系统启动时间示例详解

    这篇文章主要介绍了linux获取系统启动时间的示例,需要的朋友可以参考下
    2014-02-02
  • Shell中变量作用域的介绍与使用命令

    Shell中变量作用域的介绍与使用命令

    作用域是我们在日常学习或者工作中经常会遇到的一个问题,下面这篇文章主要给大家介绍了关于Shell中变量作用域的相关资料,文中介绍的非常详细,需要的朋友可以参考借鉴,下面跟着小编来一起学习学习吧。
    2017-08-08
  • awk实现Left、join查询、去除重复值以及局部变量讲解例子

    awk实现Left、join查询、去除重复值以及局部变量讲解例子

    这篇文章主要介绍了awk实现Left、join查询、去除重复值以及局部变量讲解例子,awk的高级使用技巧,需要的朋友可以参考下
    2014-07-07
  • Linux shell 之 提取文件名和目录名的一些方法总结

    Linux shell 之 提取文件名和目录名的一些方法总结

    本篇文章主要介绍了Linux shell 之 提取文件名和目录名的一些方法总结,具有一定的参考价值,有兴趣的可以了解一下。
    2017-01-01
  • 查询上次Ubuntu重启时间的方法命令总结

    查询上次Ubuntu重启时间的方法命令总结

    在大多数情况下,Linux 系统的关机时间、重启日期和运行时长等调试信息在系统故障排错时会显得比较重要,本文将详细介绍多种方法来查询上次 Ubuntu 重启的时间,并解释每种方法的背后原理,需要的朋友可以参考下
    2024-05-05
  • Linux 日常常用指令及应用小结

    Linux 日常常用指令及应用小结

    最近在学习一些基本的Linux指令,在这里总结一下,在搭环境中常用的一些指令,熟悉这些指令就基本能够使用CentOS进行日常操作了
    2017-08-08

最新评论