分享下處理數據分析時,linux shell 兩個比較基礎的工具
sed 指令
非交互式的字符流編輯器,支持對多文件多行的管道處理
sed [option] 'command' f.txt
sed -n '2,3p' f.txt 輸出文件的第2到3行
sed -n '/ok/p' f.txt 輸出文件中匹配ok的行
sed -i 's/mac/ok/g' f.txt 替換文件中mac字符為ok g表示全局替換
sed -i '/mac/d' f.txt 刪除文件中匹配mac字符的行
sed -i 是直接在原文件上修改
sed -e 不在原文件上修改,輸出到終端,可以借助cat 命令 > 輸出到文件中,達到和sed -i 一樣的效果
awk 指令
awk -F"," '條件{指令}' 包含多個條件時,通過分號隔開.默認的分隔符是空格
awk -F"," 'NF==7{print $0}' 如果讀取行的字段數是7則輸出此行
awk -F"," 'if(NF==7){print $0}' 條件語句
awk -F"," '{name="jim";age=10;print name}' a.txt 自定義變量
awk -F"," '/keywords/{print $0}' 通過匹配模式過濾
free|awk '/Mem/{print $4}' 查看剩余內存
ifconfig em1|awk '/inet/{print $2}' 查看Ip
uptime |awk '{print $1,$10}' 查看cpu使用率
awk [選項] ' BEGIN{編輯指令 } {編輯指令} END{編輯指令}' 文件
- 在所有行前處理,BEGIN{}
讀入第一行文本之前執行(執行1次),一般用來初始化操作
- 逐行處理,{}
逐行讀入文本執行相應的處理(1行執行1次),是最常見的編輯指令塊
- 在所有行后處理,END{}
處理完最后一行文本之后執行(執行1次),一般用來輸出處理結果
三者可單獨使用,也可同時使用。 所有命令都要寫在{}里
awk 'BEGIN{print "hello"}條件{print "a"}END{print "over"}' a.txt
ifconfig em1 |awk 'BEGIN{print "開始a"}/inet/{print $2}END{print "結束o"}'