當前位置:首頁 » 編程軟體 » shell腳本去重

shell腳本去重

發布時間: 2023-03-31 09:19:06

⑴ shell 中某個欄位重復怎麼去重

使用sort -u可去重

⑵ Shell | 文件內容處理

-u : 去重
-r : 降序
-o : 重定向到原文件
-n : 按數值排序
-t : 設定分隔符,如果以製表符作為分隔符,寫作 -t $'\t'
-k : 設定列數

感謝 sort-根據染色體編號和坐標位置排序 讓我增強了態枝手對 sort 的理解。

功能:檢查及刪除文本文件中重復搭塵出現的行,一般與sort命令結合使用

-c : 在每列旁顯示該行重復出現的次數
-d : 僅顯示重復出現的行,顯示一行
-u : 僅顯示非重復的行
-i : 忽略大小寫

-1 、 -2 : 分別代表從第一和第二個文件中指定關鍵字列,這兩個選項都使用列號作帆嫌為參數值
-a : 顯示未匹配到的行

-s : 壓縮重復的字元

-d : 自定義列分隔符,默認值為製表符
-f : 只選擇列表中指定的文本列,文本列用列號表示,多個列之間用逗號隔開,連字元表示一段連續的列號
-b : 截取字元

⑶ shell腳本如何把總結果進行去重

有個簡單的辦法
你先把所有的echo都寫到一個文兆帶液族物行耐件中,然後cat 文件再sort加uniq
echo XX >> fileA
cat fileA | sort |uniq

⑷ Shell腳本判斷文件是否存在

通察山過git命令統計出了我在某個分支上改動的所有文件列表(文件路徑是以和git工作區根目錄的相對路徑保存的),寫入了一個文件all.txt。但是,隨即發現,這個列表中的某些文件是我在開發過程中新建,然後有刪除的,現在工作區中並不存在這個文件。
由於工作臘如區的目錄層級比較多,文件也比較多敗局中,挨個檢查基本是不可能的。於是,寫了下面的腳本,放在git工作區的根目錄運行,就能夠找出那些不存在的文件:

這個腳本中就用到了一個知識點,就是shell如何判斷文件存在。下面是一個運行的例子:

然後,通過vim的簡單排序,去重命令,可以對這些結果進行篩選和簡單處理。

linux文件合並,關鍵字去重復shell腳本

看看這個:

[seesea@UC ~]$ join -t'|' <(sort -t'|' -k1,1 -r -k5,5 a.txt | uniq -w3 | sort -t'|' -k1,1) <(sort -t'|' -k1,1 b.txt) > c.txt
[seesea@UC ~]$ cat c.txt

123|kkk|jjj|sss|2013-02-21 16:11:07|OFF
135|bbb|ccc|ddd|2013-01-28 16:11:07|ON
456|kkk|jjj|sss|2013-01-28 16:11:07|ON
789|kkk|jjj|sss|2013-02-21 16:11:07|OFF

-------------------
另一個方案:

[seesea@UC ~]$ awk -F'|' 'NR==FNR{b[$1]=$2}; NR!=FNR{a[$1]=$0 OFS b[$1]; ti[$1]=(ti[$1]<$5?$5:ti[$1])}; END{for (i in a){if (a[i]~ti[i]) print a[i]}}' b.txt a.txt > c.txt
[seesea@UC ~]$ cat c.txt
456|kkk|jjj|sss|2013-01-28 16:11:07 ON
123|kkk|jjj|sss|2013-02-21 16:11:07 OFF
135|bbb|ccc|ddd|2013-01-28 16:11:07 ON
789|kkk|jjj|sss|2013-02-21 16:11:07 OFF

-------------------
兩方案都破壞原有的順序,如果你要保持 a.txt 中的順序,你另外做個排序吧

⑹ shell腳本中的一句話求解釋

這是用了awk數組

-F'-'
設置 - 為欄位分隔符

++S[$1"-"$2]
awk數組下標並非一定要是整數。這句是在處理文件每一行時,將每行的第一個欄位$1和第二個欄位$2以 $1-$2 的字元串形式作為數組下標。這句主要用於統計文件中出現$1和$2相同的情況,出現一次相同情況,對應數組元素的值就加1。

if(S[a]>3) {sub(/-.*$/,"",a) print a}
出現三次以上,用字元串處理函數sub對數組下標a做替換操作。將匹配到的內容,即將字元串a中- 以及後面的內容都替換為空,只保留前面御胡的 $1。
/-.*$/是個正則表達式,匹配含有-的所有字元豎滾,$表示字元串的結尾,.*表示中間含有任意字元(可以為余拆余空)。

最後,總結:
遍歷/tmp/ipt/bad.log文件,對前兩個欄位(以-分隔)相同且出現三次以上的記錄,列印其第一個欄位(估計就是想要的bad IP),將所有列印出來的內容排序並去重後導入/tmp/ipt/bad.ip。

⑺ 如何使用shell提取多個文本中相同的內容

問題太籠統,只能有個大致思路,按如下步驟:

  1. 使用類似下面的語句將所有文件整合為一個,排序去重後統計出一個最全數字合集。

    catfile1file2file3...|sort|uniq>dataset
  2. 分別統計合集中的所有數字在各文件中出現的次數

    forfileinfile1file2file3...
    do
    #分別統計dataset中每個友基數字在各個文件中段岩出現的次數
    #結果以「數字次數1次數2次數3...」的形式存入一個文件statistic
    done
  3. 使用awk分析statistic文件,提取所有次數均>0的數字。

    awk'BEGIN{flag=1}{for(i=2;i<=NF;i++){if($i==0)flag=0}if(flag==1)print$1}'statistic>result
  4. 最後握告御刪除中間文件dataset和statistic,只保留最終結果文件result.

要具體咨詢建議加我網路hi交流或直接追問。

⑻ 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童鞋的回答。

⑼ 如何使用shell腳本快速排序和去重文件數據

cat file|sort|uniq
這樣就可以去掉重復行

⑽ shell腳本中怎樣對逗號拼接的一系列字元串進行去重

方法有很多,我說兩個思路,拋磚引玉:
1、將你的字元串轉換成數組,然後循環兩兩比對,用unset去掉重復的,然後將這個數組重新轉換成字元串並去除空值。
2、將逗號轉換成換行,然後用uniq去重,然後轉換回來。
可能還有更加簡單的方法,需要自己研究下了

熱點內容
這個鎖屏密碼是什麼 發布:2024-11-01 12:24:51 瀏覽:91
相機存儲卡排名 發布:2024-11-01 12:24:49 瀏覽:957
androidxml格式化 發布:2024-11-01 12:23:14 瀏覽:164
Vb6編譯是錯誤不知道錯誤代碼 發布:2024-11-01 12:16:23 瀏覽:158
區域網電腦訪問伺服器怎麼提速 發布:2024-11-01 12:14:09 瀏覽:321
美創資料庫 發布:2024-11-01 12:05:45 瀏覽:915
你改愛奇藝密碼什麼意思 發布:2024-11-01 12:04:48 瀏覽:408
矩陣分解python 發布:2024-11-01 11:58:23 瀏覽:367
如何查詢微信支付密碼修改記錄 發布:2024-11-01 11:51:57 瀏覽:206
如何運維gpu伺服器 發布:2024-11-01 11:45:23 瀏覽:366