最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell腳本兩個(gè)文件關(guān)鍵行合并方式

 更新時(shí)間:2023年05月08日 14:43:19   作者:111盡力而為  
這篇文章主要介紹了shell腳本兩個(gè)文件關(guān)鍵行合并方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

shell腳本兩個(gè)文件關(guān)鍵行合并

1.寫作意圖

有兩個(gè)文件,分別是文件A和文件B。

指定A文件的某些行,并提取關(guān)鍵字key,然后在B文件中查找關(guān)鍵字key所在的行,并把A文件中關(guān)鍵字key所在的行與B文件關(guān)鍵字key所在的行合并起來寫到文件C中.這樣的小功能如果用C/C++寫將變得復(fù)雜,那么有沒有什么簡(jiǎn)介的方式呢?

答案是肯定的.Linux下的shell scripts提供十分強(qiáng)大的功能.可以通過自帶的各種命令小工具cat\grep\cut\awk\tail等等,然后通過管道方式拼接,最后通過shell腳本就可以完成很強(qiáng)大的文本信息搜集與分析功能.

話不多說,僅僅把自己會(huì)的貢獻(xiàn)出來.

2.shell按行讀取文件信息

我們從文件decoders的11行開始讀取每行的字符串信息,并將其保存到shell的變量line中.

#!/bin/bash
cat decoders|tail -n +11|while read line
do
	echo $line
done

通過上面的程序,就可以獲取文件decoders的每行數(shù)據(jù),并將其保存在變量line中,簡(jiǎn)單的測(cè)試一下,果然從11行開始打印.

3.提取每行第3列的信息

對(duì)于上面的程序增強(qiáng)一下功能,提取第3列的關(guān)鍵字并打印,如012v\4xm這樣的關(guān)鍵字.這里就再次將變量的值通過標(biāo)準(zhǔn)輸入流送給cut命令,讓該命令完成分割提取工作.最后將提取的結(jié)果保存在變量line1中

#!/bin/bash
cat decoders|tail -n +11|while read line
do
	line1=`echo $line|cut -d " " -f 3`
	echo $line1
done

"|"是管道命令,echo $line將標(biāo)準(zhǔn)輸出結(jié)果送到cut指令中進(jìn)行處理,cut -d " " -f 3表示按照空格分割字符串line,并提取第3列的字符串到變量line1中。小小的shell命令,經(jīng)過管道拼接,真是強(qiáng)大。

4.在另一個(gè)文件B中查找關(guān)鍵字key

通過上面的兩個(gè)步驟,就提取到了關(guān)鍵字line,那么接下來從文件MAINTAINERS中查找關(guān)鍵字line,并將所在的行打印出來。

#!/bin/bash
cat decoders|tail -n +11|while read line
do
	line1=`echo $line|cut -d " " -f 3`
	line2=`grep $line1 MAINTAINERS`
	echo $line2
done

這里果然匹配到關(guān)鍵字4xm所在的行,對(duì)于匹配不到的行,將輸出空字符串。

5.字符串非空判斷輸出

#!/bin/bash
cat decoders|tail -n +11|while read line
do
	line1=`echo $line|cut -d " " -f 3`
	line2=`grep $line1 MAINTAINERS`
if [ -n "$line2" ];then
	echo $line2
fi
done

通過shell的判斷語句將非空的結(jié)果打印出來

6.關(guān)鍵字key所在的文件A的行內(nèi)容與所在的文件B行內(nèi)容合并顯示

#!/bin/bash
cat decoders|tail -n +11|while read line
do
	line1=`echo $line|cut -d " " -f 3`
	line2=`grep $line1 MAINTAINERS`
if [ -n "$line2" ];then
	echo $line
	echo $line2
fi
done

到此,一個(gè)看似復(fù)雜的功能,通過shell就輕松的搞定.

最后通過sh test.sh>C.log輸出流重定向到C文件中,C文件保存了合并的結(jié)果

shell將多行合并成一行的小技巧

Shell中將多行合并成一行的小技巧,其實(shí)很簡(jiǎn)單: 每行的結(jié)尾符為\n,只要將每行的\n換成想要的分隔符,就可以達(dá)到目的了。 

主要借助于tr命令

[root@host ~]# cat data
127.0.0.1
127.0.0.2
127.0.0.3
127.0.0.4
[root@host ~]# cat data | tr '\n' '|' ? ? ? ?# 行間以|來分隔
127.0.0.1|127.0.0.2|127.0.0.3|127.0.0.4

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

剑河县| 木里| 太和县| 马边| 双辽市| 揭东县| 万年县| 洛宁县| 贵定县| 五大连池市| 色达县| 宁阳县| 遂宁市| 合肥市| 米脂县| 东山县| 七台河市| 泰和县| 阳曲县| 灵台县| 墨竹工卡县| 上犹县| 全椒县| 布尔津县| 盐边县| 嘉荫县| 彩票| 象州县| 二连浩特市| 广州市| 武川县| 绥中县| 长丰县| 朝阳市| 涟源市| 铜川市| 盐边县| 新闻| 株洲市| 焦作市| 达日县|