Shell文件的排序、合并和分割
sort
sort [option] inputfile
選項(xiàng)及其意義:
| -b | 忽略每行前面開(kāi)始出的空格字符; |
| -c | 檢查文件是否已經(jīng)按照順序排序; |
| -d | 排序時(shí),處理英文字母、數(shù)字及空格字符外,忽略其他的字符; |
| -f | 排序時(shí),將小寫(xiě)字母視為大寫(xiě)字母; |
| -i | 排序時(shí),除了040至176之間的ASCII字符外,忽略其他的字符; |
| -m | 將幾個(gè)排序號(hào)的文件進(jìn)行合并; |
| -M | 將前面3個(gè)字母依照月份的縮寫(xiě)進(jìn)行排序; |
| -n | 依照數(shù)值的大小排序; |
| -o<輸出文件> | 將排序后的結(jié)果存入制定的文件; |
| -r | 以相反的順序來(lái)排序; |
| -t<分隔字符> | 指定排序時(shí)所用的欄位分隔字符;默認(rèn)是空格符 |
| +<起始欄位>-<結(jié)束欄位> | 以指定的欄位來(lái)排序,范圍由起始欄位到結(jié)束欄位的前一欄位。 |
| -k\< num > | 指定排序域。1表示第一域,2表示第二域。 |
| -u | 對(duì)結(jié)果進(jìn)行去重 |
e.g.
sort -t: -k3n inputfile
-k的使用
-k選項(xiàng)的語(yǔ)法格式:
這個(gè)語(yǔ)法格式可以被其中的逗號(hào),分為兩大部分,Start部分和End部分。Start部分也由三部分組成,其中的Modifier部分就是我們之前說(shuō)過(guò)的類似n和r的選項(xiàng)部分。我們重點(diǎn)說(shuō)說(shuō)Start部分的FStart和C.Start。C.Start也是可以省略的,省略的話就表示從本域的開(kāi)頭部分開(kāi)始。FStart.CStart,其中FStart就是表示使用的域,而CStart則表示在FStart域中從第幾個(gè)字符開(kāi)始算“排序首字符”。同理,在End部分中,你可以設(shè)定FEnd.CEnd,如果你省略.CEnd,則表示結(jié)尾到“域尾”,即本域的最后一個(gè)字符。或者,如果你將CEnd設(shè)定為0(零),也是表示結(jié)尾到“域尾”。
e.g.
uniq
uniq [option] inputfile
選項(xiàng)及其意義:
| -c或——count | 在每列旁邊顯示該行重復(fù)出現(xiàn)的次數(shù); |
| -d或–repeated | 僅顯示重復(fù)出現(xiàn)的行列; 每個(gè)記錄僅顯示一次 |
| -f<欄位>或–skip-fields=<欄位> | 忽略比較指定的欄位; |
| -s<字符位置>或–skip-chars=<字符位置> | 忽略比較指定的字符; |
| -u或——unique | 僅顯示出不重復(fù)的行列; |
| -w<字符位置>或–check-chars=<字符位置> | 指定要比較的字符。 |
e.g.
uniq 與 sort -u的區(qū)別
- sort -u所有的重復(fù)行都會(huì)被去除。
- uniq 去除的重復(fù)行必須是連續(xù)出現(xiàn)的。
join
join [option] file1 file2
選項(xiàng)及其意義:
option|desc
-|-
-a<1或2>:除了顯示原來(lái)的輸出內(nèi)容之外,還顯示指令文件中沒(méi)有相同欄位的行; 相當(dāng)于left join ,right join
-e<字符串>:若[文件1]與[文件2]中找不到指定的欄位,則在輸出中填入選項(xiàng)中的字符串;
-i或–ignore-case:比較欄位內(nèi)容時(shí),忽略大小寫(xiě)的差異;
-o<格式>:按照指定的格式來(lái)顯示結(jié)果;
-t<字符>:使用欄位的分割字符;
-v<1或2>:更-a相同,但是只顯示文件中沒(méi)有相同欄位的行;
-1<欄位>:連接[文件1]指定的欄位; -2<欄位>:連接[文件2]指定的欄位。
- -a與-v的區(qū)別:
-a顯示顯示匹配的記錄。-v不顯示匹配的記錄。 - -o
join默認(rèn)顯示2個(gè)文件中的所有域,-o用于改變顯示結(jié)果。
bash
#顯示2個(gè)文件的前2列
join -t: -o1.1 1.2 2.1 2.2 file1
- -1,-2
join默認(rèn)指定2個(gè)文件的第一個(gè)域進(jìn)行join,-1,-2指定2個(gè)文件進(jìn)行join的域
cut
cut用于從標(biāo)準(zhǔn)輸入或文件中按域或行提取數(shù)據(jù)。
cut [option] file
選項(xiàng)及其意義:
| -c | 指定提取的字符數(shù)或字符范圍 |
| -f | 指定提取的域數(shù)或域范圍 |
| -d | 改變域分割符 |
-c格式:
- -cn :第n個(gè)字符
- -cn,m :第n,m個(gè)字符
- -cn-m :第n至m個(gè)字符
-f格式與-c一樣
paste
paste將標(biāo)準(zhǔn)輸入或文件中的內(nèi)容粘貼到新的文件。多個(gè)文件按列對(duì)列進(jìn)行粘貼
paste [option] inputfile outfile
選項(xiàng)及其意義:
| -s | 每個(gè)文件粘貼為一行,默認(rèn)按列粘貼 |
| - | 從標(biāo)準(zhǔn)輸入中讀取文件 |
| -d | 改變域分割符,默認(rèn)是空格或tab |
e.g.
#每行顯示5個(gè)文件 ls | past -d“ ” - - - - -split
用于切割文件
split [option] input output
選項(xiàng)及其意義:
| -或-l | 用于指定文件切割的行數(shù) |
| -b | 用于文件切割的大小,單位字節(jié) |
| -C | 同-b,但切割時(shí)盡量保持每行的完整性 |
| -d | 使用數(shù)字作為后綴 |
| -a | 指定后綴長(zhǎng)度,-a 3,長(zhǎng)度為3 |
文件切割時(shí)默認(rèn)加上編號(hào),aa~zz,當(dāng)不指定小文件名字時(shí),默認(rèn)為x。
tr
tr實(shí)現(xiàn)字符轉(zhuǎn)換
tr [option] 字符串1 字符串2 輸入文件
選項(xiàng)及其意義:
| -c | 選定字符串1中的補(bǔ)集,即反選字符串1中的補(bǔ)集 |
| -d | 刪除字符串1中的所有字符 |
| -s | 刪除所有重復(fù)出現(xiàn)的字符序列,只保存1個(gè) |
e.g.
#刪除所有大寫(xiě)字母 tr -s A-Z filetr支持部分正則表達(dá)式,例如A-Z 0-9 A*3,tr支持POSIX字符以及控制字符
| \a | Ctrl-G | 鈴聲 | \007 |
| \b | Ctrl-H | 退格符 | \010 |
| \f | Ctrl-L | 走行換頁(yè) | \014 |
| \n | Ctrl-J | 新行 | \012 |
| \r | Ctrl-M | 回車 | \015 |
| \t | Ctrl-I | tab鍵 | \011 |
| \v | Ctrl-X | \030 |
注意這些控制字符,如果想在linux下輸入,如我們可能需要輸入^M這種字符,只需ctrl+V+M同時(shí)按下即可。
tar
tar [-cxtzjvfpPN] 文件與目錄 ….
-c:建立一個(gè)壓縮文件的參數(shù)指令(create 的意思);
-x:解開(kāi)一個(gè)壓縮文件的參數(shù)指令!
-t:查看 tarfile 里面的文件!
-r:向壓縮歸檔文件末尾追加文件
-u:更新原壓縮包中的文件
這五個(gè)是獨(dú)立的命令,壓縮解壓都要用到其中一個(gè),可以和別的命令連用但只能用其中一個(gè).
特別注意,在參數(shù)的下達(dá)中, c/x/t/r/u 僅能存在一個(gè)!不可同時(shí)存在!因?yàn)椴豢赡芡瑫r(shí)壓縮與解壓縮。
1、*.tar 用 tar –xvf 解壓
2、*.gz 用 gzip -d或者gunzip 解壓
3、.tar.gz和.tgz 用 tar –xzf 解壓
4、*.bz2 用 bzip2 -d或者用bunzip2 解壓
5、*.tar.bz2用tar –xjf 解壓
6、*.Z 用 uncompress 解壓
7、*.tar.Z 用tar –xZf 解壓
rev
rev命令將文件中的每行內(nèi)容以字符為單位反序輸出,即第一個(gè)字符最后輸出,最后一個(gè)字符最先輸出,依次類推
colrm
colrm命令用于刪除文件中的指定列。colrm命令從標(biāo)準(zhǔn)輸入設(shè)備讀取數(shù)據(jù),轉(zhuǎn)而輸出到標(biāo)準(zhǔn)輸出設(shè)備。如果不加任何參數(shù),則colrm命令不會(huì)過(guò)濾任何一行。
colrm 開(kāi)始列號(hào) 結(jié)束列號(hào) < file
總結(jié)
以上是生活随笔為你收集整理的Shell文件的排序、合并和分割的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 走进并行世界
- 下一篇: Shell变量作用域