awk,說shell中的瑞士軍刀不爲過吧html
# 實現SQL中的group by功能,例如對「姓名 地點 年齡」按照地點字段統計其年齡之和 awk '{arr[$2]+=$3} END{for(i in arr) print i,arr[i]}' source_file.txt # 對下述數據peo.o,按照城市分組(組內年齡降序排序),並使得全局分組的排序以組內年齡最大值降序排序 # 姓名 城市 年齡 # 老Q 上海 65 # 老K 南京 68 # 小A 上海 24 # 小M 西安 25 # 老M 西安 88 # 老A 南京 45 # 指望結果 # 姓名 城市 年齡 # 老M 西安 88(組與組之間最大) # 小M 西安 25(組內降序) # 老K 南京 68 # 老A 南京 45 # 老Q 上海 65 # 小A 上海 24 sort -t $'\t' -k 3nr peo.o > peo_sort.o # 預處理,對年齡全局降序排序 awk 'NR==FNR{if(arr[$2]=="") arr[$2]=$3} NR>FNR{print $0,"\t",arr[$2]} ' peo_sort.o peo_sort.o | sort -t $'\t' -k 4nr -k 3nr | cut -f 1-3 > peo_rs.o # awk中第一次遍歷文檔獲得同城年齡最大值集合,第二次從新輸出文件,其中每行新添一字段用以標註其所在組的最大年齡,sort中對新添字段排序,這時結果將按照組內年齡最大值分組降序排序,cut中截取原文檔字段進行輸出。
# 待續
sort,對文檔數據進行排序node
# 對txt.o第三列(以tab符分割)按照數值降序排序,輸出到sort.o文件中 sort -t $'\t' -r -n -k 3 txt.o > sort.o # 對txt.o第三列(以冒號分割)按照數值降序,第一列數值升序,第二列字符降序排列 sort -t $':' -k 3nr -k 1n -k 2r txt.o > sort.o # 精確地對某個域進行排序(-k 2n多是對從第二個域到最後的範圍進行排序) sort -t $'\t' -k1,1 -k7,7nr txt.o > sort.o #(對第一個域1,1和第7個域7,7nr進行排序)
-r # 默認爲升序,該參數將其改成降序排序 -t # 按照後面指定的字符進行行切分,例如要按照tab符分割,則用$'\t' -k # 指定按照切分後的某列(字段)進行排序,首列爲1 -n # 將設置以數值進行排序,否則10會在2前面 -o # sort默認將結果輸出至標準輸出,重定向>則將結果寫入新文件,若重定向到原文件,則會清空原文件;該參數可將結果寫入原文件,如 sort -r number.txt -o number.txt -u # 排序時去除重複的行 -f # 忽略大小寫(將小寫字母都轉換爲大寫字母來進行比較) -c # 檢查文件是否已排好序,若是亂序,則輸出第一個亂序的行的相關信息,最後返回1 -C # 檢查文件是否已排好序,若是亂序,不輸出內容,僅返回1 -M # 會以月份來排序,好比JAN小於FEB等 -b # 忽略每一行前面的全部空白部分,從第一個可見字符開始比較
參考和補充(例如以第二個字段第二個字符排序之類):Linux Shell之sort命令shell
df,顯示目前全部檔案系統的最大可用空間及使用情形url
# 經常使用命令,以易讀格式顯示文件系統使用狀況 df -h
-a # 顯示所有的檔案系統和各分割區的磁盤使用情形 -i # 顯示i -nodes的使用量 -h # 顯示使用「Human-readable」的輸出(GB、MB 等易讀的格式) -k # 大小用k來表示 (默認值) -m # 大小用M表示 -t # 顯示某一個檔案系統的全部分割區磁盤使用量 -x # 顯示不是某一個檔案系統的全部分割區磁盤使用量 -T # 顯示每一個分割區所屬的檔案系統名稱
du,查詢檔案或目錄的磁盤使用空間spa
# 經常使用命令,以易讀格式顯示文件的磁盤使用空間,最後附上總計 du -ch
-a # 顯示所有目錄和其次目錄下的每一個檔案所佔的磁盤空間 -b # 大小用bytes來表示 (默認值爲k bytes) -c # 最後再加上總計 (默認值) -h # 顯示使用「Human-readable」的輸出(GB、MB 等易讀的格式) -s # 只顯示各檔案大小的總合 (summarize) -x # 只計算同屬同一個檔案系統的檔案 -L # 計算全部的檔案大小
參考和補充:df命令和du命令用法詳解
.net
tar,對文件目錄進行打包備份 unix
# 將整個 /etc 目錄下的文件所有打包成爲 /tmp/etc.tar tar -cvf /tmp/etc.tar /etc # 僅打包,不壓縮! tar -zcvf /tmp/etc.tar.gz /etc # 打包後,以 gzip 壓縮 tar -jcvf /tmp/etc.tar.bz2 /etc # 打包後,以 bzip2 壓縮 # 將 /tmp/etc.tar.gz 文件解壓縮在 /usr/local/src 底下 cd /usr/local/src tar -zxvf /tmp/etc.tar.gz
-c # 創建新的歸檔文件 (create ) -x # 從歸檔文件中解出文件 -r # 向歸檔文件末尾追加文件 注意 # 在參數的下達中,c/x/t 僅能存在一個。 -O # 將文件解開到標準輸出 -v # 處理過程當中輸出相關信息 -f # 對普通文件操做 -z # 調用gzip來壓縮歸檔文件,與x聯用時調用gzip完成解壓縮 -Z # 調用compress來壓縮歸檔文件,與x聯用時調用compress完成解壓縮
參考和補充:tar命令的詳細解rest
scp,主機之間拷貝文件code
-a # 儘量將檔案狀態、權限等資料都照原狀予以複製 -r # 若 source 中含有目錄名,則將目錄下之檔案亦皆依序拷貝至目的地 -f # 若目的地已經有相同檔名的檔案存在,則在複製前先予以刪除再行復制
參考和補充:SCP 命令htm
cron,定時執行任務
crontab -l # 顯示當前用戶的cron服務 crontab -u # 爲某用戶設置cron服務(通常root用戶在執行cron命令時須要此參數) crontab -e # 編輯當前用戶的cron服務(配合-u參數) crontab -r # 刪除當前用戶的全部cron服務(配合-u參數) /sbin/service crond start/stop/restart/reload # 啓動/中止/重啓/從新加載配置文件 # 單行爲一個執行命令,前五個字段分別表明「分 時 日 月 周」,具體參看參考連接; # 用戶經過crontab -e設定的cron服務內容會被保存到/var/spool/cron/username文件中,在該文件被修改後,cron守護進程會從新讀到內存; # 在/etc/crontab文件中會有cron.hourly/cron.daily/cron.weekly/cron.monthly等內容,分別指定按時/日/周/月執行的內容文件;若是某cron服務須要根據調度來執行,而非按時/日/周/月執行,則可添加到/etc/cron.d目錄中。
參考和補充:crontab 詳解、crontab命令詳解
grep,全局正則搜索(Global search Regular Expression(RE) and Print out the line)
grep myword -r * #在當前目錄下面搜索全部含有myword的行 -n # 在匹配的行前面打印行號 -r # 遞歸搜索文件夾中目錄及每一個文件 -i # ignore-case,忽略大小寫 -h # 打印時不顯示文件名 -l # 只顯示包含匹配模板的行的文件名清單(不一樣項目之間用換行符分割) -v # 反檢索,只顯示不匹配的行 匹配tab符號:grep $'\t'
若是文章對你有用,請在收藏之餘「頂/贊」一下以示鼓勵吧 (/ω\)