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