shell腳本實現將文件中的幾行輸出合並成一行顯示


shell腳本實現將文件中的幾行輸出合並成一行顯示

現在有一個文件aa.txt ,其實現格式如下,而我想實現的結果是192.168.1.17 down

[root@localhost shell]# cat aa.txt
192.168.1.17
down
192.168.1.103
open
192.168.1.221
open
192.168.1.104
down
192.168.1.175
down
192.168.1.112
open
192.168.1.11
down

[root@localhost shell]# awk ‘{if (NR%2==0){print $0} else {printf”%s “,$0}}’ aa.txt
192.168.1.17 down
192.168.1.103 open
192.168.1.221 open
192.168.1.104 down
192.168.1.175 down
192.168.1.112 open
192.168.1.11 down

或者

[root@localhost shell]# cat aa.txt | awk ‘{if(NR%2!=0)ORS=” “;else ORS=”\n”;print}’
192.168.1.17 down
192.168.1.103 open
192.168.1.221 open
192.168.1.104 down
192.168.1.175 down
192.168.1.112 open
192.168.1.11 down

 

先說一下適用的場景,市場部那邊希望看到某些商品中“黃牛”用戶的活動情況,以及“黃牛”使用代金券的情況,然后發一個excel文件過來,拿到文件先復制到notepad++中,格式類似:

id name  price
1 name1  price1
2 name2  price2
3 name3  price3
4 name4  price4
5 name5  price5
6 name6  price6
7 name7  price7
8 name8  price8
9 name9  price9

查詢的時候根據ID查詢,所以要把所有的ID組織到一行中,並寫成(1,2...,8,9)的格式,這需要做如下件事:

第一,刪除第一行標題,sed '1d' ids.txt  ;

第二,只顯示第一列, awk -F'\t' '{print $1}'  ;

第三,把第一列以逗號分隔,tr '\n' ',' ;

第四,把第三步中的結果前后加上左右括號,sed 's/^/(/'。

把這四步組在一起,執行:sed '1d' ids.txt | awk -F'\t' '{print $1}' | tr '\n' ',' | sed 's/,$/);/' | sed 's/^/(/' > ok.txt

就得到了(1,2,3,4,5,6,7,8,9);

然后再寫個sql和這個文件拼接上就OK了。此處對於數據量小的時候效果不明顯,當處理幾千萬數據,一個文本有幾個G的時候,

Linux強大的處理文本的功能就顯示出來了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM