1. 程式人生 > 其它 >linux裡面substr函式_Linux 三劍客之awk 命令

linux裡面substr函式_Linux 三劍客之awk 命令

技術標籤:linux裡面substr函式

1. 簡介

AWK 是一種處理文字檔案的語言,是一個強大的文字分析工具。

類似於sql: awk=select field from table

之所以叫 AWK 是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字元。

     awk指令碼通常由以下3部分構成:  BEGIN{ 這裡面放的是執行前的語句 }   END {這裡面放的是處理完所有的行後要執行的語句 }  {這裡面放的是處理每一行時要執行的語句}

2. 基本用法

awk [選項引數] 'script' var=value file(s)awk [選項引數] -f scriptfile var=value file(s)

2.1 處理指定檔案的內容

  awk 'condition { action }' filename

2.2 處理某個命令的執行結果

  command | awk ' condition { action }'

3. 變數

3.1 FS(欄位分隔符)
-F fs or --field-separator fs
指定輸入檔案折分隔符,fs是一個字串或者是一個正則表示式,如-F:

# $0 表示當前整行內容,$1,$2 表示第一個欄位,第二個欄位# 預設以空格作為分隔符 輸出第一個欄位echo "aa bb  cc dd  ee ff" | awk  '{print $1}'# 以丨作為echo "aa bb l cc dd l ee ff" | awk -F 'l' '{print $1}'echo "aa bb  cc : dd  ee ff" | awk -F ':' '{print $1}'
bbc754dcecce55aa004f7deaead86928.png

以1作為分割符輸出第一個字元和第二個字元

3.2 NF(當前行的欄位個數)

$NF就代表最後一個欄位,$(NF-1)代表倒數第二個欄位

#以空格為分隔符列印最後一個欄位 echo "aa bb cc  dd" | awk '{ print $NF}'#以空格為分隔符列印倒數第二個欄位 echo "aa bb cc  dd" | awk '{ print $(NF-1)}'#以|為分隔符 列印倒數第二個欄位echo "aa bb cc  dd" | awk -F '|' '{ print $(NF-1)}'
a746af4e428be7934aa4e2a7323aa663.png 36e4ceb3c9caa48fc809d021813c31a5.png

3.3 NR (當前處理的是第幾行)

cat test.txt | awk '{print NR")", $0}'
8c61a0d7314498a58a73af1e2d787f14.png

  列印當前行號和當前文字內容

3.4 FILENAME(當前檔名)

awk '{print FILENAME, NR")", $0}' test.txt 
6480974617d7885e73d56f1c25741510.png

3.5 其他變數

  • RS:行分隔符,用於分割每一行,預設是換行符。
  • OFS:輸出欄位的分隔符,用於列印時分隔欄位,預設為空格。
  • ORS:輸出記錄的分隔符,用於列印時分隔記錄,預設為換行符。
  • OFMT:數字輸出的格式,預設為%.6g。

4. 函式

4.1 print 和 printf

用於列印輸出的函式

4.2 常用函式

  • substr():返回子字串。
  • substr($1,2):返回第一個欄位,從第2個字元開始一直到結束。
  • substr($1,2,3):返回第一個欄位,從第2個字元開始開始後的3個字元。
  • sin():正弦。
  • cos():餘弦。
  • sqrt():平方根。
  • rand():隨機數。
  • toupper():字元轉為大寫。
  • tolower():字元轉為小寫。

5 正則表示式

# 查詢包含root的行 cat test.txt | awk '/root/ {print $0}'#查詢包含user和orange的行cat test.txt | awk '/usr/orange/ {print $0}'
b04e11289dce36f3cfb7bcbecd9358a3.png