好幾行stdout一次只處理一行內的數字 - Linux

Table of Contents

※ 引述《LIAR (玻璃做的大叔)》之銘言:
: 標題: [問題] 好幾行stdout一次只處理一行內的數字
: 時間: Tue Apr 5 10:05:52 2016
:
: 我舉個例
: fdisk -lu /dev/sda|grep ^/dev/sda
:
: /dev/sda5 11999999 17187199 2593600+ 83 Linux
:
: 像這樣,我雖然可以用cut分別切
: cut -c 6-10
: cut -c 16-25
: cut -c 28-37
: cut -c 39-49
:
: /sbin/badblocks -sv /dev/sda -o /tmp/$A.bad $C $B
: 所以和其他行沒關係,一次只處理一行的資訊。
:
--
→ asilzheng: awk '{print $1 $2 $3 $4}' | read A B C D 04/05 10:26
→ LIAR: 請問awk會把$4後面的+號也抓到,有辦法排除嗎?Y 04/05 10:36

awk 會吃掉空白, print 應該會全串在一起. 可能要加 ""
awk '{print $1" "$2" "$3" "$4}'
或是改用 printf

看你要用 regexp 精確一點替換
awk '{printf("%s %s %s %s\n",gensub(/^.*\//,"","1",$1),$2,$3,
gensub(/+$/,"","1",$4))}'

或是 substr 直接抓
awk '{printf("%s %s %s %s\n",substr($1,5),$2,$3,
substr($4,1,length($4)-1))}'

--

All Comments

Sierra Rose avatarSierra Rose2016-04-09
感謝,gensub和substr我沒學過,受教了。
Candice avatarCandice2016-04-11
那個可能有問題,因為是無差別刪除,如果有些數字後面沒有+
Liam avatarLiam2016-04-15
號,就會少一個位數。
Tom avatarTom2016-04-20
substr無差別,gensub就正常,不過我還在研究gensub語法