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強大的處理文本的功能就顯示出來了。