Linux 基礎命令知識2

用cut 安列切分文件

#平時按列切分文件用的最多的就是awk ,cut 命令相對awk可能更加輕量級和命令簡潔
#語法 cut -f FIELD_LIST filename # FIELD_LIST是需要的列,由列號組成,彼此之間用逗號分隔。
demo: cut -f 2,3 filename 打印第2列和第3列
cat test.txt 
123	xueping.you	test
234	xiaoming	test

cut -f 2,3 test.txt 
xueping.you	test
xiaoming	test

cut -f 2 test.txt | xargs 
xueping.you xiaoming

cut -f 1 --complement test.txt  #--complement用來取補集
xueping.you	test
xiaoming	test

cut -f2 -d"," test.txt # -d 用於指定分隔符

cut -c1-5 range_filed.txt #用於切分字符 cut range_field.txt -c1-3,6-9 --output-delimiter "," #按字符切分成兩組使用分隔符"," 區分

sed(stream editor) 文本處理使用

# sed 可以替換給定文本中的字符串 , 它可以利用正則表達式進行匹配
sed 's/pattern/replace_string/' file 或者 cat file | sed 's/pattern/replace_string/'   # 匹配給定文本中的第一個匹配符使用replace_string進行替換
sed -i 's/pattern/replace_string/' #選項-i可以將結果應用於原文件 
sed -i 's/pattern/replace_string/g' #命令尾部加上g 能替換匹配到的所有內容
sed 's/pattern/replace_string/2g'  #使用2g表示替換從第三個匹配的地方開始替換,忽略前兩處的替換

#sed 定界符可以使用任意, / | : 都是可以的例如: sed 's:text:replace:g'

######sed 通用命名 #######
#移除空白行 sed '/^$/d' file  ;/pattern/d會刪除匹配樣式的行,空白行的匹配是開始符緊隨着結束符
#已匹配的字符串標記&  echo this is an example | sed 's/\w+/[&]/g' ; result: [this] [is] [example]
# echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' 
# result:this is 7 in a number; \(pattern\) 用於匹配字符串,對於匹配的第一個子串,其對應的標記是\1 ,匹配的第二個子串是\2
demo:
echo this is digit 7 digit 8 in a number | sed 's/digit \([0-9]\) digit \([0-9]\)/\1\2/';
result: this is 78 in a number

awk入門使用

awk腳本的結構基本如下所示:
awk 'BEGIN{print "start"}pattern {commonds} END{print "end"}' file
#awk 命令工作方式
#(1)執行BEGIN{commond} 語句塊中的語句
#(2)從文件或stdin中讀取一行,然後執行pattern {commonds}。重複這個過程直到文件被讀取完畢
#(3)當讀至輸入流末尾時,執行END{print comonds}語句塊
Simple Demo:
echo -e "line1\nline2" | awk 'BEGIN{print "start"} {print }END{print "end"}'
start
line1
line2
end

echo | awk '{var1="v1";var2="v2";var3="v3";print var1,var2,var3;print var1"-"var2"-"var3}'
v1 v2 v3
v1-v2-v3

#特殊變量
NR:表示記錄數量,在執行過程中對應於當前行號
NF: 表示字段數量,在執行過程中對應於當前行的字段數

echo -e "1,2,3,45,6,5" | awk -F ',' '{ for(i=0;i++<NF;) print $i;}' #按照 ","分割,使用for 遍歷分割的列並做輸出
1
2
3
45
6
5

#將外部變量傳遞給awk
方法1: var="Hello World";echo | awk -v vv=$var'{print vv}'
# 個人推薦使用這種方法v1=$var1 v2=$var2 作爲awk參數 緊跟在BEGIN 、 {} 、END後面
方法2:var1="Hello ";var2="World";echo | awk '{print v1,v2}' v1=$var1 v2=$var2 

#我們可以爲需要處理的行進行過濾
awk 'NR < 5' #行號小於5的行
awk 'NR==1,NR==4' #行號在1到5之間的行
awk '/linux/' #包含樣式linux的行,(可以用正則表達式來指定樣式)
awk '!/linux/' #不包含樣式的linux行
cat test.txt | awk 'NR < 2 { print $0}'
123	xueping.you	test

#awk內建字符串控制函數
length(string):字符串長度
index(string, search_string):字符串在search_string 中出現的位置
split(string, array, delimiter) : 通過定界符生成一個字符串列表,並將該列表存入數組
substr(string , start_position, end_position)
sub(regex, replacement_str, string) : 將regex正則匹配的第一次內容替換爲replacement_str
gsub(regex, replacement_str, string) : 將regex正則匹配的所有內容替換爲replacement_str
match(regex,string): 檢查正則表達式是否能夠匹配字符串,如果能夠匹配返回非0值,否則返回0



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章