1. 程式人生 > >shell中字元提取命令awk和cut的不同

shell中字元提取命令awk和cut的不同

shell程式設計中,用於字元提取或者擷取的命令有3個,分別是cut,awk,sed,嚴格的說,sed不能說字元擷取命令,他是字元替換命令,在這裡,我們總結一下cut和awk的不同:

1命令的使用格式不同

cut

cut [選項] 檔名
    ·選項可以為:
        -f 列號 : 提取第幾列
        -d 分隔符 :按照指定的分隔符將一行分割成數列,cut預設的分隔符是製表符

awk

awk '條件1{動作1}條件2{動作2}......條件n{動作n}' 檔名
    條件:一般使用關係表示式作為條件,比如大於號 ">" ,小於號 "<"
    動作:包括,格式化輸出 和 流程控制語句

2預設的分隔符的不同:

cut預設的分隔符是製表符,而awk 預設的分隔符是空格 或者 製表符,當一個檔案中,每一行都含有 空格 時,要使用awk ,否則會出現錯誤:
比如:df 這個檔案
[[email protected] japan]# df -h
Filesystem           Size  Used Avail Use% Mounted on
/dev/mapper/cl-root   16G  6.9G  9.2G  43% /
devtmpfs             473M     0  473M   0% /dev
tmpfs                489M   80K  489M   1% /dev/shm
tmpfs                489M  7.1M  482M   2% /run
tmpfs                489M     0  489M   0% /sys/fs/cgroup
/dev/sda1           1014M  173M  842M  18% /boot
/dev/mapper/cl-home 1017M   59M  959M   6% /home
tmpfs                 98M   52K   98M   1% /run/user/0

它得每一列之間是使用 空格作為分隔符的,但是看第一列和第二列,空格不只有一個,如果想當然的使用cut 命令,以空格作為分隔符,輸出第五列使用率,會出錯

[[email protected] japan]# df -h | cut -d " " -f 5 









59M

結果前六行和最後一行是空的,只有第七行的第五列輸出來了

如果使用awk命令:

[[email protected] japan]# df -h | awk '{print $5}'
Use%
43%
0%
1%
2%
0%
18%
6%
1%

正確輸出,課件,awk預設是以空格作為分隔符,當一個檔案的列之間有多個空格並且數量不一定時,使用awk能夠很好解決。

可是,cut 可以使用 -d 來指定分隔符,awk怎麼指定呢?
使用BEGIN和FS
舉個例子:

#看一下這個檔案
cat /etc/passwd 
[[email protected] japan]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin       
systemd-bus-proxy:x:999:997:systemd Bus 
Proxy:/:/sbin/nologin

可以看出,是以“:”作為分隔符的

[[email protected] japan]# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}'
root    0
amandabackup    33
shizengqiang    1000
user1   1002
[[email protected] japan]# 

其中 單引號中的BEGIN{FS=”:”}就是指定 “:”為分隔符

其他的不同,等我發現了再補充。

相關推薦

shell字元提取命令awkcut不同

shell程式設計中,用於字元提取或者擷取的命令有3個,分別是cut,awk,sed,嚴格的說,sed不能說字元擷取命令,他是字元替換命令,在這裡,我們總結一下cut和awk的不同: 1命令的使用格式不同 cut cut [選項] 檔名 ·選項可以

linux常用文字字元分割分析awkcut命令

詳細文章: 由passwd檔案做示例,提取相關部分 [[email protected] 桌面]# cat /etc/passwd | head -10 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/

Linux基礎學習之Shell程式設計——字元擷取命令相關——printf、cutawk、sed

  一、字元擷取命令之cut命令 1、字元擷取命令有哪些? grep  cut    printf(嚴格來說不算)   awk   sed  命令 2、grep 是在檔案當中提取符合條件的行  

shell 獲取當前工作路徑命令檔案所在絕對路徑

常見的一種誤區,是使用 pwd 命令,該命令的作用是“print name of current/working directory”,這才是此命令的真實含義,當前的工作目錄,這裡沒有任何意思說明,這個目錄就是指令碼存放的目錄。所以,這是不對的。你可以試試 bash shell/a.sh,a.sh 內容

關於shell的正則表示式awk的使用

今天有幸得方叔開的小灶,特將課堂筆記整理如下,以備後續使用。         1、關於正則表示式 egrep和grep -e都可接正則表示式,若使用grep接正則表示式,則表示式中的"["和“]”需要轉義匹配次數+           表示匹配至少一次 *         

Pytohn實現Linux shell的wc命令

python wc #!/usr/bin/python import sys import os from optparse import OptionParser def opt(): parser = OptionParser() parser.add_option("-c

shell的位置變量特殊變量

shell 變量$$Shell本身的PID(ProcessID)$!Shell最後運行的後臺Process的PID$?最後運行的命令的結束代碼(返回值)$-使用Set命令設定的Flag一覽$*所有參數列表。如"$*"用「"」括起來的情況、以"$1 $2 … $n"的形式輸出所有參數。$@所有參數列表。如"$

Linux解壓縮命令gzipunzip的一點說明

保留 定向 -c 一點 test 重定向 gzip 默認 nbsp Linux 常用的壓縮命令有 gzip 和 zip,兩種壓縮包的結尾不同:zip 壓縮的後文件是 *.zip ,而 gzip 壓縮後的文件 *.gz ;相應的解壓縮命令則是 gunzip 和 unzip g

Linux在shell輸入歷史命令

進行 ear 真的 ctrl lin hist home 效率 search 在Linux的shell中,經常輸入的命令有很多雷同,甚至是一樣的, 如果是長命令,再次敲一遍效率真的是很低, 不過可以通過Ctl+r, 查找history中以前輸入的命令,很是好用.

Shell編程-03-Shell的特殊變量擴展變量

wstring lds entos oai 錯誤 通過 read 退格 操作 特殊變量 ? ? 在Shell中的特殊變量主要分別兩種位置參數變量、狀態變量兩種。 位置參數變量 ? ? Shell中的位置參數變量主要是指$0、$1、$#等,主要用於從命令行、函數或腳本執行等地

統計字串字元出現的次數(||&&的區別)

var str = "ProsperLee"; // || 返回第一個為真的表示式的值,若全為假則返回最後一個表示式的值 // && 返回第一個為假的表示式的值,若全為真則返回最後一個表示式的值 String.prototype.charCount = function(){

shell的基本命令以及基本知識

##diff命令## diff命令用於比較兩個檔案的不同,從而生成補丁 vim westos vim westos1 diff westos westos1 ##比較倆個檔案的不同## diff westos westos1 > westos.path ##將we

Shell的expr命令

expr EXPRESSION 將EXPRESSION的值列印到標準輸出 使用index命令 test="AaBbCcDdEeFfGg" echo $(expr index $test A)

linux shell 2>/dev/null/dev/null 2>&1 的解釋

shell中可能經常能看到:>/dev/null 2>&1 命令的結果可以通過%>的形式來定義輸出 分解這個組合:“>/dev/null 2>&1” 為五部分。 1:> 代表重定向到哪裡,例如:echo "123" > /home

Shell的tr命令加密解密的一個小應用

tr命令可以來刪除或替換,這個可能大家都非常熟悉。比如 [[email protected] ~]# echo "The Number:12345" | tr -cd '[0-9]' # 僅保留數字 12345 [[email protected] ~]# echo "

AWKCUT

awk是一個強大的文字分析工具,相對於grep的查詢,sed的編輯,awk在其對資料分析並生成報告時,顯得尤為強大。簡單來說awk就是把檔案逐行的讀入,以空格為預設分隔符將每行切片,切開的部分再進行各種分析處理。 awk有3個不同版本: awk、nawk和gawk,未作特別說明,一般指g

shell的let命令

在shell中,let命令用於指定算術運算,即 let expretion。 例項如下: #!/usr/bin/env bash a=2 echo "a init is $a" let "a+=1" echo "a+=1 is $a" let "a-=1" echo "a-=1 is $

shell字元到ascii碼或數字的轉換

   一個思路是利用awk,首先在awk的BEGIN中構造出一個字元到ascii碼或數字的轉換表,然後讀入待轉換的字元查表輸出相應的轉換碼。下面的一個示例程式碼實現了字母A-Z到數字1-26的轉換,因為shell在語言層次全是字串,所以這個轉換稱為一個字元到另一個字元的對映更

shell的fork、sourceexec總結(包括環境變數)

摘要:對fork,source和exec三種方式執行shell指令碼的總結。 準備知識 1.我們所執行的任何程式,都是由父程序(parent process)所產生出來的一個子程序(child process),子程序在結束後,將返回到父程序去。此一現像在Linux系統中被稱為 fork。當子程序被產生

微信跳一跳高分系列二:adb shell 的常用命令

input 命令 > adb [-s device] shell input [<source>] <command> [<arg>...] The sources are: mouse