shell腳本兩個文件關(guān)鍵行合并方式
shell腳本兩個文件關(guān)鍵行合并
1.寫作意圖
有兩個文件,分別是文件A和文件B。
指定A文件的某些行,并提取關(guān)鍵字key,然后在B文件中查找關(guān)鍵字key所在的行,并把A文件中關(guān)鍵字key所在的行與B文件關(guān)鍵字key所在的行合并起來寫到文件C中.這樣的小功能如果用C/C++寫將變得復(fù)雜,那么有沒有什么簡介的方式呢?
答案是肯定的.Linux下的shell scripts提供十分強(qiáng)大的功能.可以通過自帶的各種命令小工具cat\grep\cut\awk\tail等等,然后通過管道方式拼接,最后通過shell腳本就可以完成很強(qiáng)大的文本信息搜集與分析功能.
話不多說,僅僅把自己會的貢獻(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中,簡單的測試一下,果然從11行開始打印.

3.提取每行第3列的信息
對于上面的程序增強(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.在另一個文件B中查找關(guān)鍵字key
通過上面的兩個步驟,就提取到了關(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所在的行,對于匹配不到的行,將輸出空字符串。
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

到此,一個看似復(fù)雜的功能,通過shell就輕松的搞定.
最后通過sh test.sh>C.log輸出流重定向到C文件中,C文件保存了合并的結(jié)果
shell將多行合并成一行的小技巧
Shell中將多行合并成一行的小技巧,其實(shí)很簡單: 每行的結(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é)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Shell 腳本實(shí)現(xiàn)每隔100行插入一條記錄且記錄第一列包含行號其他列不變
本文通過實(shí)例代碼給大家講解了使用Shell 腳本實(shí)現(xiàn)每隔100行插入一條記錄且記錄第一列包含行號其他列不變的實(shí)現(xiàn)方法,非常不錯,具有參考借鑒價值,需要的朋友參考下2016-12-12
linux shell查看當(dāng)前外網(wǎng)IP
這篇文章主要介紹了如何在LINUX操作系統(tǒng)下查看本地IP地址(在SHELL下)的相關(guān)資料,需要的朋友可以參考下2015-09-09
通過Spring Shell 開發(fā) Java 命令行應(yīng)用
這篇文章主要介紹了通過Spring Shell 開發(fā) Java 命令行應(yīng)用的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11
Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解
這篇文章主要介紹了Shell執(zhí)行/調(diào)用Java/Jar程序例子的實(shí)例詳解的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-08-08
實(shí)現(xiàn)android自動化測試部署與運(yùn)行Shell腳本分享
這篇文章主要介紹了實(shí)現(xiàn)android自動化測試部署與運(yùn)行Shell腳本分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03
Linux shell 獲得字符串所在行數(shù)及位置的方法
這篇文章主要介紹了Linux shell 獲得字符串所在行數(shù)及位置的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

