導航:首頁 > 凈水問答 > 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過濾重復相關的資料

熱點內容
磁分離污水處理設備最大處理量 瀏覽:616
污水處理站管理的主要職責 瀏覽:152
純水泥漿叫什麼 瀏覽:473
食品加工廢水處理設計方案 瀏覽:899
污水源熱泵cop是多少 瀏覽:339
污水中哪些污染物是重金屬類 瀏覽:351
鍋爐排污水用申請總量么 瀏覽:935
仿河牙球樹脂健身球 瀏覽:843
燒開黑色水垢 瀏覽:373
水龍頭水垢堵了怎麼清除 瀏覽:67
edi的工作流程圖片 瀏覽:158
蒸餾化學圖 瀏覽:850
反滲透設備加葯劑量怎麼換算 瀏覽:937
同時蒸餾萃取 瀏覽:18
戴森凈化器沒有更換濾芯怎麼重置 瀏覽:820
酷路澤內置汽油濾芯怎麼更換 瀏覽:142
ps空氣凈化器光效怎麼做 瀏覽:633
污水設備調節池裡面有什麼設備 瀏覽:653
城市污水溝處理怎麼樣 瀏覽:965
圓底燒瓶平底燒瓶蒸餾燒瓶的區別 瀏覽:458