格式化輸出

2022-06-15 05:39:12 字數 4783 閱讀 5221

printf:格式化輸出命令

%ns:輸出字串。n是數字指代輸出幾個字元

%ni:輸出整數。n是數字指代輸出幾個數字

%m.nf:輸出浮點數。m和n是數字,指代輸出的整數字數和小數字數。如%8.2f 代表共輸出8位數,其中2位是小數,6位是整數。

輸出格式:

\a:輸出警告聲音

\b:輸出退格鍵,也就是backspace鍵

\f:清除螢幕

\n:換行

\r:回車,也就是enter鍵

\t:水平輸出退格鍵,也就是tab鍵

\v:垂直輸出退格鍵,也就是tab鍵

[root@localhost tmp]# printf '%s %s %s\n' 1 2 3 4 5 6

1 2 3

4 5 6

[root@localhost tmp]# cat student.txt

id name gender mark

1 sl m 89

2 hus m 90

3 sd m 99

[root@localhost tmp]# printf '%s\t %s\t %s\t %s\n' $(cat student.txt)

id name gender mark

1 sl m 89

2 hus m 90

3 sd m 99

awk '條件1 條件2...' 檔名

條件:x>10 判斷變數x是否大於10

x>=10 大於等於

x<=10 小於等於

動作:格式化輸出

流程控制語句

[root@localhost tmp]# cat student.txt

id name gender mark

1 sl m 89

2 hus m 90

3 sd m 99

[root@localhost tmp]# awk '' student.txt

name mark

sl 89

hus 90

sd 99

說明:$2 代表第二列

$4 代表第四列

[root@localhost tmp]# df -h | grep /dev/sda1

/dev/sda1 1014m 133m 882m 14% /boot

[root@localhost tmp]# df -h | grep /dev/sda1 | awk ''

14%[root@localhost tmp]# df -h | grep /dev/sda1 | awk '' | cut -d "%" -f 1

14begin 用法:

在執行輸出第二列第四列之前,先輸出 test!!

[root@localhost tmp]# awk 'begin ' student.txt

test!!

name mark

sl 89

hus 90

sd 99

fs內建變數,分隔符:第一列沒有分割

[root@localhost tmp]# awk ' ' /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin 1

daemon 2

adm 3

lp 4

sync 5

shutdown 6

halt 7

mail 8

operator 11

games 12

ftp 14

nobody 99

systemd-network 192

dbus 81

polkitd 999

sshd 74

postfix 89

mysql 27

nginx 998

chrony 997

zhangsan 1000

user1 1001

user2 1002

user3 1003

新增begin,第一列分割

[root@localhost tmp]# awk 'begin ' /etc/passwd

root 0

bin 1

daemon 2

adm 3

lp 4

sync 5

shutdown 6

halt 7

mail 8

operator 11

games 12

ftp 14

nobody 99

systemd-network 192

dbus 81

polkitd 999

sshd 74

postfix 89

mysql 27

nginx 998

chrony 997

zhangsan 1000

user1 1001

user2 1002

user3 1003

end命令,在所有的命令執行後,在執行:

[root@localhost tmp]# awk 'end' student.txt

id gender

1 m2 m

3 mthe end!!

sed [選項]'[動作]' 檔名

選項:-n:一般sed命令會把所有資料都輸出到螢幕,如果加入此選擇,則只會把經過sed命令處理的行輸出到螢幕。

-e:允許對輸入資料應用多條sed命令編輯

-i:用sed的修改結果直接修改讀取資料的檔案,而不是由螢幕輸出

動作:a\: 追加,在當前行後新增一行或多行。新增多行時,除最後一行外 ,每行末尾需要用「\」代表資料未完結。

c\: 行替換,用c後面的字串 替換原資料行,替換多行時,除最後一行外,每行末尾需用「\」代表資料未完結。

i\: 插入,在當前行前插入一行或多行。插入多行時,除最後一行外,每行末尾需要用「\」代表資料未完結。

d: 刪除,刪除指定的行。

p: 列印,輸出指定的行

s: 字串替換 ,用乙個字串替換另乙個字串。格式「行範圍s/舊字串/新字串/g」

輸出檔案第二行:

[root@localhost tmp]# cat student.txt

id name gender mark

1 sl m 89

2 hus m 90

3 sd m 99

[root@localhost tmp]#

原檔案也會在下面輸出

[root@localhost tmp]# sed '2p' student.txt

id name gender mark

1 sl m 89

1 sl m 89

2 hus m 90

3 sd m 99

原檔案不會在下面輸出

[root@localhost tmp]# sed -n '2p' student.txt

1 sl m 89

刪除第2行到第4行:

[root@localhost tmp]# cat student.txt

id name gender mark

1 sl m 89

2 hus m 90

3 sd m 99

[root@localhost tmp]# sed '2,4d' student.txt

id name gender mark

在第二行後追加hello

[root@localhost tmp]# sed '2a hello' student.txt

id name gender mark

1 sl m 89

hello

2 hus m 90

3 sd m 99

在第二行前插入兩行資料:

[root@localhost tmp]# sed '2i hello\nihao' student.txt

id name gender mark

hello

ihao

1 sl m 89

2 hus m 90

3 sd m 99

第四行替換為 no person

[root@localhost tmp]# sed '4c no person' student.txt

id name gender mark

1 sl m 89

2 hus m 90

no person

第三行中90換成10

[root@localhost tmp]# sed '3s/90/10/g' student.txt

id name gender mark

1 sl m 89

2 hus m 10

3 sd m 99

替換完儲存到檔案:

[root@localhost tmp]# sed -i '3s/90/10/g' student.txt

[root@localhost tmp]# cat student.txt

id name gender mark

1 sl m 89

2 hus m 10

3 sd m 99

把sl和sd替換為空

[root@localhost tmp]# sed -e 's/sl//g;s/sd//g' student.txt

id name gender mark

1 m 89

2 hus m 10

3 m 99

格式化輸出

a 浮點數 十六進製制數字和p 記數法 a 浮點數 十六進製制數字和p 記法 c 乙個字元 char c 乙個iso寬字元 d 有符號十進位制整數 int ld ld 長整型資料 long hd 輸出短整形。e 浮點數 e 記數法 e 浮點數 記數法 f 單精度浮點數 預設float 十進位制記數法...

格式化輸出

a 浮點數 十六進製制數字和p 記數法 a 浮點數 十六進製制數字和p 記法 c 乙個字元 char c 乙個iso寬字元 d 有符號十進位制整數 int ld ld 長整型資料 long hd 輸出短整形。e 浮點數 e 記數法 e 浮點數 記數法 f 單精度浮點數 預設float 十進位制記數法...

格式化輸出

簡單輸出 print 你好小明 print 你好小紅 print 你好小李 帶變數的輸出 更有靈活性,易於維護 name 小李 print name 加號拼接字串 pay 8 print 花費一共 pay 元 print裡用逗號列印多個變數 name 小明 score 90 print name,s...