查找两个文件包含的字符串或不包含的字符串shell脚本

一、需求

在这里,我简化一下,因为下午操作这两个文本都是10几万行,但只过滤出这两个文件中含有相同的或不同字符串PPID。

二,步聚

1、文件ha1

a
b
c

2、文件ha2

a
c
d

3、找出两个文件都包含有的字符串PPID

3.1过滤脚本

#!/bin/sh
#set -x
SRC_FILE=$1
TARGET_FILE=$2
RESULT_FILE=$3

>$RESULT_FILE

while read LINE
do
grep $LINE $TARGET_FILE > /dev/null
if [ $? -eq 0 ]; then
echo $LINE >> $RESULT_FILE
fi
done < $SRC_FILE
#set +x

3.2 执行结果

[[email protected]]#./filter.sh ha1 ha2 ha3
[[email protected]]#cat ha3
a
c

4、找出其中一个文件不包字符串PPID

4.1 修改$? 不等于0即可

#!/bin/sh
#set -x
SRC_FILE=$1
TARGET_FILE=$2
RESULT_FILE=$3

>$RESULT_FILE

while read LINE
do
grep $LINE $TARGET_FILE > /dev/null
if [ $? -ne 0 ]; then
echo $LINE >> $RESULT_FILE
fi
done < $SRC_FILE
#set +x

4.2 执行结果

[[email protected]]#./filter.sh ha1 ha2 ha3
[[email protected]]#cat ha3
b
时间: 2024-12-24 02:51:21

查找两个文件包含的字符串或不包含的字符串shell脚本的相关文章

批量杀掉多个pid文件中记录的pid进程, 并集成到shell脚本中

1 head_files=`find ./fmsConf/ -name "*.pid"` 2 for file in $head_files 3 do 4 cat $file | awk '{print $1}' | xargs kill -9 5 rm -f $file 6 done 代码如上 解释: 1. 查找到 ./fmsConf目录下的所有的pid文件 2. 对查找到的文件进行遍历 3. 开始遍历 4. 分开解释: 1. cat $file : 打印出file文件的内容 2.

windows下建立文件的换行符^M导致linux下的shell脚本运行错误的解决方案

经常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M,这将导致shell脚本运行错误,主要是因为dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主要解决如下: (1)在VI编辑器中将^M删除: 将VI编辑器切换到命令模式下,输入 :%s/^M//g (注意^M 不是shift ^ +M 而是ctrl+v 加上ctrl+m)  s///g是shell的替换命令 此命令必须是手动打上,不可复制. (2)dos2unix 命令 dos2unix f

两个文件比较之comm命令

comm命令可用于两个文件之间的比较.它有很多不错的选项可用来调整输出,以便我们执行交集.求差(difference)以及差集操作.? 交集:打印出两个文件所共有的行.? 求差:打印出指定文件所包含的且互不相同的那些行.? 差集:打印出包含在文件a中,但不包含在其他指定文件中的那些行. 假设现在有两个文件a和b,内容分别是:a(1,2,3),b(3,4,5).那么,对这两个文件进行操作的结果如下.交集:3.求差:1,2,4,5.差集(a):1,2. 需要注意的是comm必须使用排过序的文件作为输

Shell脚本实现文件遍历和删除操作

本文需要实现的功能如下:某文件夹下具有由按数字编号命名的文件夹,需要删除除最大编码外的文件. 具体实现 大致思路:循环遍历该文件夹下所有文件,正则匹配出最大编码文件:然后循环文件,删除除最大编码外的文件. 实现代码如下: #!/bin/bash function getdir(){ max=0 DATEPATTERN="^[0-9]*$" for element in `ls $1` do if [[ "$element" =~ $DATEPATTERN ]] th

shell 脚本---每隔几个小时查看日志文件中包含某些字符串的行数

在linux生产环境下,有如下这样的一个平常运维需要的工作. 每隔一段时间,比如两个小时,就要对每秒都要产生日志的日志文件(这里假设为testfile.out,其绝对路径为/home/panlm/shellpra/testfile.out)进行一个操作,这个操作是将日志中包含某些字符串的行给单独打印出来,并重新放在一个文件(这里的文件假设为out.log)中.这些需要匹配的字符串可以按这种方式表示"0x216000ab"其中ab为01到18的连续整数. 实现这样一个要求的做法主要有两步

Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中

这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Simple

VC++ 在两个文件互相包含时会出现的错误

首先,要分别在两个文件中实现以下两个类 class Object { public: NewType ToType(); }; class NewType : public Object { } --------------------------------------------------------------------------------    做法1  --------------------------------------------------------- //在文件

从键盘接收两个文件夹路径,把其中一个文件夹(包含内容),拷贝到另一个文件夹中

package cn.it.text; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Scanner; /* * 1.从键盘接收两个文件夹路径,把其中一个文件夹(包含内容) * 拷贝到另一个文件

华为练习--查找两个字符串a,b中的最长公共子串

程序源代码: #include <iostream> #include <string> using namespace std; void findCommon(string a,string b); int main() { string a,b; getline(cin,a); getline(cin,b); string temp; if(a.length()<b.length()) { temp=a; a=b; b=temp; } findCommon(a,b);