awk命令:報告生成器(不修改文本,只是提取信息)

awk:報告生成器(不修改文本,只是提取信息)

一些重要參數

  • 行 record
  • 列 field
  • NR number of record
  • NF number of field 每行有幾列
awk '{print $1}' file	# 打印文件裏一列,以空格爲分割的
awk '{print $NF}' file	# 打印文件裏最後列
awk '{print $(NF-1)}' file	# 打印文件裏倒數第二列,不加括號就是NF的值減一

列對齊 “\t”

awk '{print $1, "\t", $2, "\t", $3}' file

awk默認把空格當作字符拼接符,逗號則是默認分隔符

awk '{print $1, $2, $3}' file 			# 逗號把每一列隔開(一個空格)
awk '{print $1 $2 $3}' file 			# 空格把每一列拼接在一起
echo 1:2 3*4 | awk -F: '{print $1}'			# 用-F指定那個是分隔符
echo 1:2 3*4 | awk -F" " '{print $(NF-1)}'		# 用-F指定那個是分隔符(雙引號中的是分隔符)

顯示行數

awk '{print NR "\t" $0}' awk.file	# $0表示所有的列

顯示列數

awk '{print N "\t" $0}' awk.file	# $0表示所有的列

顯示2012年入職的員工(有條件的提取信息)

awk '$2=="2012"{print $0}' staff.txt	# ==兩個等於號表示匹配

只打印每行的列數

awk '{print NF}' staff.txt

只打印行號

awk '{print N}' staff.txt

只打印第三行

awk 'NR=="3"{print NR, $0}' staff.txt

只打印第五列

awk 'NF=="5"{print $0}' staff.txt

如果不輸入文件名,系統會等待輸入!只能Ctrl+C取消

自定義分隔符

awk 'BEGIN{FS=","}{print $1}'

BEGIN表示全局變量,FS表示當前分隔符

awk默認的輸入分隔符和輸出分隔符是分別定義的, 默認的時候都是空格。

awk 'BEGIN{FS=",";OFS=","}{print $1, $2}'

兩個文件同時打印行號和某列,則會合並顯示(文件2內容追加在文件1下面)

awk '{print NR, $1}' satff.txt awk.txt

輸出的時候同時輸出文件名

awk '{print NR, FILENAME, $0}' satff.txt awk.txt
awk '{print NR, "\t", FILENAME, "\t", $0}' satff.txt awk.txt

隱藏某一列的內容

awk '{$3="XXXX"; print $0}' staff.txt

由於awk不會修改文件內容,可用>覆蓋或>>追加到某文件

awk '{$3="XXXX"; print $0}' staff.txt > result
more result

把result的內容用awk來處理並顯示

awk '{$3="XXXX"; print $0}' staff.txt < result

輸入內容並用awk來處理和顯示,END是輸入的結束符

awk '{$3="XXXX"; print $0}' staff.txt << END

awk做計算

awk '{a=1; b=3; print a+b}'

此時會等待輸入,由於我們已經輸入好了,所以直接回車,awk會給出顯示結果

awk計算時遇到字符,從左到右遇到數字進行匹配,遇到字符就停止,若第一個爲字符,則直接忽略掉

awk '{a=1d888sa; b=333dsgh654; print a+b}'	# 結果是334
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章