导航:首页 > 净水问答 > grep过滤重复

grep过滤重复

发布时间:2021-03-29 00:43:53

① 求助:如果从程序的输出中grep出两种想要的字符串

举个例子:假设查找的字符串是abc.第一步:使用命令 fopen 打开文件第二步:用命令 fread 每次读取一个字节a(从字符串abc的开始逐个进行比较)比较,条件为ture,在进行比较下面一个b,依此类推。如果都成功,说明abc匹配成功,然后将以后的字符读入到数组或文件中并停止对数组或文件的写入。如果有任何一个不匹配,重复步骤2(还得重新从比较a开始)

② 正则表达式 匹配重复出现的字符串(如ABC出现三次 ABCABCABC)

没看明白题目,一楼三楼都可能是解决方案。
另外你用什么工具来操作(js? c#? sed? awk? grep? perl?)?

③ linux grep查询结果再过滤

令|

grep查询过滤需要使用管道命令|。

举例说明:

1、在进程表中查找特定进程的命令通常如专下:

④ shell脚本取重复数据的最后一条记录

假设你这个.unl文件叫 file.unl,并且内容不含斜杠 / 。
脚本大致如下:

#!/bin/bash
myfile=file.unl
touch tmp
while read line
do
grep "$line" tmp >/dev/null 2>&1
if [ $? -eq 0 ]; then
num=`awk '{print $NF}' tmp`
num=`expr $num + 1`
sed -i “s/^\($line\t\)[0-9]*$/\1$num/” tmp
else
echo -e "$line\t1" >>tmp
fi
done <$myfile # ---> 1), 2)
awk '$NF>1{print}' tmp >err.unl # ---> 3)
sed -i 's/^\(..*\)\t[0-9]*$/\1/' tmp
mv -f tmp $myfile # ---> 4)
exit 0

思路就是,
1)遍历 unl 文件的每一行,逐行拷贝一份到临时文件tmp中,后面附加一个出现的次数。
2)遍历的同时到tmp文件中去查找是否有已存在的相同记录,如果有,就只是更新tmp文件中记录的次数而不添加一个新记录。
3)最后根据tmp文件中记录的次数是否大于1来生成err.unl文件,记录重复的行及总共出现的次数。
4)将tmp文件中的次数记录去除即得到更新后的 unl 文件。
由于要求要覆盖原unl文件,所以这里存在风险。 建议运行脚本前先备份一下原unl文件。

最后,恕我直言,这个题目的难度不止10分。
你看,while循环,grep / sed / awk,全用上了 ^_^
————————————————————————————————————
发现一个更简练的方法,两条命令即可搞定:
awk '{s[$0]+=1} END{for(a in s) print a, s[a]}' file.unl >err.unl
awk '{print $1}' err.unl >file.unl
当然,前提是unl文件的每行内容不能含有空格或TAB之类的分隔符。
参考了 http://..com/question/271261293.html#here 这个问题中shuguangbo童鞋的回答。

⑤ linux求教grep怎么查找 一个单词开头结尾是 两个相同的字母的 并且顺序相同 例如 aoiiiiiiiao

⑥ 在unix命令中grep几次相同的字符串结果为什么进程号是不同其他的都是相同的 例子:grep XXXX

这说明这个进程在几次执行grep命令间,关闭了又重新起来了。
正常情况下,进程创建时,进程号是随机的

⑦ 请问一下sed怎么获取重复的值

grep-Po"(?<=(A:)[0-9]+"$your_file_path

⑧ 用shell找出除ID外重复的列

楼主你不厚道。

====================

不知道是不是Linux的shell,如果是UNIX,就把下面的/bin/bash改为相应的shell。

下面是具体的代码和测试结果。

这个脚本是读"$1"参数的,所以执行的时候直接将1.txt缀上就可以了

格式如下:

./find.sh1.txt

==============shell脚本代码===============

#!/bin/bash

#FileName:FIND.SH

#Description:为网络知道提供的适用代码。

#文件总行数:

nLine=$(cat$1|wc-l)

#取第一行中”非ID“字符串。

findStr=$(cat1.txt|sed-n1p|sed's/(^[0-9]*,)(.*$)/2/')

#找出与findStr相匹配的所有行,统一输出到临时文件temp中保存等待整理。

cat$1|grep$findStr>temp

#整理temp中的内容,保存到formatTemp临时文件中。

nLTemp=$(cattemp|wc-l)

foriin$(head-n$((nLTemp-1))temp)

do

printf"$i||">>formatTemp

done

tail-n1temp>>formatTemp

#进入循环处理:

foriin$(cat$1)

do

findStr=$(echo$i|sed's/(^[0-9]*,)(.*$)/2/')

#如果findStr在formatTemp中已经存在了,就跳过这一行。

grep"$findStr"formatTemp>/dev/null

if[$?==0];then

continue

fi

#找出与findStr相匹配的所有行,统一输出到临时文件temp中保存等待整理。

cat$1|grep$findStr>temp

#整理temp中的内容,保存到formatTemp临时文件中。

nLTemp=$(cattemp|wc-l)

foriin$(head-n$((nLTemp-1))temp)

do

printf"$i||">>formatTemp

done

tail-n1temp>>formatTemp

done

#输出最后的formatTemp内容:

catformatTemp

#做最后的清理工作:

rm-ftempformatTemp

================================

================================

测试文件1.txt内容:

1,Jack,88,beer

2,tom,45,wine

3,Jack,88,beer

4,tom,45,wine

5,Jack,88,beer

6,White,99,beer

7,White,99,beer

8,Rock,100,wine

9,tom,45,wine

10,Rock,100,wine

=========================

输出结果:

[root@jiajiashellscript]#./find.sh1.txt

1,Jack,88,beer||3,Jack,88,beer||5,Jack,88,beer

2,tom,45,wine||4,tom,45,wine||9,tom,45,wine

6,White,99,beer||7,White,99,beer

8,Rock,100,wine||10,Rock,100,wine

=========================

⑨ 请问如何去除2个数组间的重复值谢谢

我纯粹一菜啊.....梓版麻烦帮我把这问题解决一下吧.....这问题困扰我好久了....实现
不了我整个流程都做不下去...

阅读全文

与grep过滤重复相关的资料

热点内容
仿河牙球树脂健身球 浏览:843
烧开黑色水垢 浏览:373
水龙头水垢堵了怎么清除 浏览:67
edi的工作流程图片 浏览:158
蒸馏化学图 浏览:850
反渗透设备加药剂量怎么换算 浏览:937
同时蒸馏萃取 浏览:18
戴森净化器没有更换滤芯怎么重置 浏览:820
酷路泽内置汽油滤芯怎么更换 浏览:142
ps空气净化器光效怎么做 浏览:633
污水设备调节池里面有什么设备 浏览:653
城市污水沟处理怎么样 浏览:965
圆底烧瓶平底烧瓶蒸馏烧瓶的区别 浏览:458
特种涂料和树脂支持政策 浏览:505
PVDF超滤膜滤芯是什么 浏览:55
反渗透膜多大的省水 浏览:44
小区污水排污流量计算 浏览:764
石油废水成分 浏览:977
热水器维里的水垢怎么出里 浏览:404
山西新农村污水处理设备多少钱 浏览:431