1. 程式人生 > >Linux shell指令碼程式設計-將一行中的某個部分去重

Linux shell指令碼程式設計-將一行中的某個部分去重

一,背景。

今天遇到了一個使用場景,獲取檔案中每一行的某個屬性資料,然後將該屬性資料去重。

二,shell指令碼編寫。

bash
1 #!/bin/bash
2 for line in `cat test1|awk -F "|" '{print $4}'|awk -F "[" '{print $2}'|awk -F "\]" '{print $1}'`
3 do
4 echo "line"$line
6 str=`echo $line|awk -F "," '{for(i=1;i<=NF;i++) {if(!a[$i]++) {printf("%s", $i); if(i != NF) {printf(",")} } } }'`
7 echo $str
8 # echo "new Line"$str
9 # len=${#str}
10 #
11 # echo "len : "$len
12 # if [ "${str: -1}" == "," ];then
13 # str=${str:0:$len-1}
14 # fi
15 # echo $str
16 done

三,分析。

1,獲取想要的屬性資料,以”|”為分隔符獲取第四個資料然後再獲取”[]”中的資料。

cat test1|awk -F "|" '{print $4}'|awk -F "[" '{print $2}'|awk -F "\]" '{print $1}
2,資料去重。以”,”作為分割, 遍歷整個陣列,去除重複的字串。
echo $line|awk -F "," '{for(i=1;i<=NF;i++) {if(!a[$i]++) {printf("%s", $i); if(i != NF) {printf(",")} } } }
其中有一個去除重複項最為關鍵的點: !a[$i]++ 這裡有使用到hash陣列。將遍歷的字串以key和value都為字串變數的值存入到hash陣列中,然後判斷是否存在,如果不存在就但列印這個變數,然後列印換行符。

四,待改進點。

1,遇到了一個問題, 每行要去重的資料,如果$NF不是唯一的變數,會使得打印出來的字串少一個,反之則會多一個,被註釋掉的內容是打算實現將欄位串判斷最後一個字元是不是’,’,如果是就截斷字串。但是未能實現。

相關推薦

Linux shell指令碼程式設計-一行某個部分

一,背景。 今天遇到了一個使用場景,獲取檔案中每一行的某個屬性資料,然後將該屬性資料去重。 二,shell指令碼編寫。 bash 1 #!/bin/bash 2 for line in `cat test1|awk -F "|"

Linux-Shell指令碼程式設計基礎(1)

1. 我們一般在使用Linux系統的時候,都活接觸到shell指令碼的使用,例如我們經常在linux系統中使用的ls命令、cd命令等,都是衣蛾簡單而又基本的shell命令,在 linux系統中我們一般的使用如下的格式來進行shell指令碼的編寫: (1)格式 #!bin/bash e

Linux Shell指令碼程式設計 --awk命令詳解

簡單使用: awk :對於檔案中一行行的獨處來執行操作 。 awk -F :'{print $1,$4}'   :使用‘:’來分割這一行,把這一行的第一第四個域打印出來 。    

從新手到系統管理員(四):Linux Shell指令碼程式設計之數學(Part I)

本文由 [茶話匯] – [Qing] 編譯自 [Avishek Kumar] 轉載請註明出處 這部分主要討論數學相關的shell指令碼程式設計。 加法運算 新建一個檔案“Addition.sh”,輸入下面的內容並賦予其可執行的許可權。 [code language=”bash”] #!/bin/b

Linux Shell指令碼程式設計提高(12)

實際上Shell是一個命令直譯器,它解釋由使用者輸入的命令並且把它們送到核心,不僅如此,Shell有自己的程式語言用於對命令的編輯,它允許使用者編寫由shell命令組成的程式.Shel程式語言具有普通程式語言的很多特點,比如它也有迴圈結構和分支控制結構等,用這種程式語言編寫的Shell程式與其他應用程式具有同

Linux Shell指令碼程式設計--awk命令詳解

簡單使用: awk :對於檔案中一行行的獨處來執行操作 。 awk -F :'{print $1,$4}'   :使用‘:’來分割這一行,把這一行的第一第四個域打印出來 。 詳細介紹: AWK命令介紹 awk語言的最基本功能是在檔案或字串中基於指定規則瀏覽和抽取資訊,awk抽取資訊後,才能進行其他

Linux Shell指令碼程式設計--函式返回值

Shell函式返回值,常用的兩種方式:return,echo 1) return 語句shell函式的返回值,可以和其他語言的返回值一樣,通過return語句返回。示例: #!/bin/sh function test() { echo "arg1 =

Linux Shell 指令碼程式設計(3)—Shell輸入與輸出

shell 輸入與輸出 提綱: echo read cat 管道 tee 檔案重定向

Linux Shell指令碼程式設計--cut命令

cut cut命令可以從一個文字檔案或者文字流中提取文字列。 cut語法 [[email protected] ~]# cut -d'分隔字元' -f fields <==用於有特定分隔字元 [[email protected] ~]# cut

一文學會Linux-shell指令碼程式設計基礎

終於到shell 指令碼這章了,在以前筆者賣了好多關子說shell指令碼怎麼怎麼重要,確實shell指令碼在linux系統管理員的運維工作中非常非常重要。下面筆者就帶你正式進入shell指令碼的世界吧。 到現在為止,你明白什麼是shell指令碼嗎?如果明白最好了,不明白

Linux Shell指令碼程式設計--scp命令詳解

不同的Linux之間copy檔案常用有3種方法: 第一種就是ftp,也就是其中一臺Linux安裝ftp Server,這樣可以另外一臺使用ftp的client程式來進行檔案的copy。 第二種方法就是採用samba服務,類似Windows檔案copy 的方式來操作,比較簡潔方便。 第三種就是利用scp命令來

Linux-Shell指令碼程式設計-學習-4-Shell程式設計-運算元字-加減乘除計算

對於任何一種程式語言都很重要的特性就是運算元字的能力,遺憾的是,對於shell指令碼來說,這個過程比較麻煩,在shell指令碼中有兩種途徑來進行數學運算操作。 1.expr 最開始的時候,shell提供了一個特別的命令來梳理數學表示式,expr允許在命令列上處理數學表示式

Linux shell指令碼程式設計之函式

在編寫功能比較複雜的shell指令碼時,完成具體任務的程式碼有時會被重複使用,bash shell指令碼提供函式特性實現程式碼複用,函式是被賦予名稱的指令碼程式碼塊。 一、建立函式 在bash shell指令碼中建立函式的格式如下: function name() {

Linux Shell指令碼程式設計--sed命令詳解

簡介 sed 是一種線上編輯器,它一次處理一行內容。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有

Linux Shell指令碼程式設計--xargs命令詳解

xargs是給命令傳遞引數的一個過濾器,也是組合多個命令的一個工具。它把一個數據流分割為一些足夠小的塊,以方便過濾器和命令進行處理。通常情況下,xargs從管道或者stdin中讀取資料,但是它也能夠從檔案的輸出中讀取資料。xargs的預設命令是echo,這意味著通過管道傳遞給xargs的輸入將會包含換行和空

初學乍練redis:兩行shell指令碼實現slowlog持久化轉儲(保留歷史條目、時間戳格式化)

目錄 一、問題提出         在排查redis效能問題時,從slowlog中找執行緩慢的命令進行優化是一種常規手段。redis slowlog被設計成記憶體中一個先進先出的佇列結構,一旦容量被填滿,新的條目就會擠出舊條目。特別是在慢日

python檔案的資料

# -*- coding: utf-8 -*- ''' 只使用與較小的檔案,比較大的檔案執行時間長 ''' def fenhang(infile,outfile): infopen = ope

shell指令碼程式設計實現計算器功能並根據選擇其保存於檔案

######################################################################### # File Name: project.sh # Author: lixiaogang # mail: [ema

學習Linux shell指令碼連線字串的方法

這篇文章主要介紹了Linux shell指令碼中連線字串的方法,如果想要在變數後面新增一個字元,可以用一下方法: 程式碼如下: $value1=home $value2=${value1}"=" echo $value2 把要新增的字串變數新增{},並且需要把$放到外面。 這樣輸出的結果

Linux命令列與shell指令碼程式設計大全(二)

十一、處理使用者輸入 命令列引數 讀取引數: $0是程式名,$1是第一個引數,$2是第二個引數,以此類推,直到第9個引數$9。當引數個數超過10以後,需要在變數數字周圍加上花括號,如${10},如果輸入到命令列的引數是字串且含有空格,需要使用引號。 #! /bin/bash echo