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中字元提取命令awk和cut的不同
shell程式設計中,用於字元提取或者擷取的命令有3個,分別是cut,awk,sed,嚴格的說,sed不能說字元擷取命令,他是字元替換命令,在這裡,我們總結一下cut和awk的不同: 1命令的使用格式不同 cut cut [選項] 檔名 ·選項可以
linux常用文字字元分割分析awk和cut命令
詳細文章: 由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、cut、awk、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中解壓縮命令gzip和unzip的一點說明
保留 定向 -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 "
AWK和CUT
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、source和exec總結(包括環境變數)
摘要:對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