[問題] 好幾行stdout一次只處理一行內的數字

作者: LIAR (玻璃做的大叔)   2016-04-05 10:05:52
我舉個例
fdisk -lu /dev/sda|grep ^/dev/sda
/dev/sda1 63 1646699 823318+ 83 Linux
/dev/sda2 1690000 5450000 1880000+ 83 Linux
/dev/sda3 5559999 11979999 3210000+ 83 Linux
/dev/sda4 11995000 2930275054 1459140027+ 5 Extended
/dev/sda5 11999999 17187199 2593600+ 83 Linux
像這樣,我雖然可以用cut分別切
cut -c 6-10
cut -c 16-25
cut -c 28-37
cut -c 39-49
得到一連串裝置名(文字)、起點、終點、長度,但是我想把這個送到其他指令
譬如dd或badblocks做處理,以行為單位
有點像是把置名(文字)、起點、終點、長度分別設成$A,$B,$C,$D這樣,
然後我再把這些變數丟到後續指令像是
/sbin/badblocks -sv /dev/sda -o /tmp/$A.bad $C $B
所以和其他行沒關係,一次只處理一行的資訊。
請問我該如何處理?
作者: n3oanderson (wake up ...)   2016-04-05 10:12:00
awk
作者: asilzheng (asil)   2016-04-05 10:26:00
awk '{print $1 $2 $3 $4}' | read A B C D
作者: LIAR (玻璃做的大叔)   2016-04-05 10:36:00
請問awk會把$4後面的+號也抓到,有辦法排除嗎?Y
作者: asilzheng (asil)   2016-04-05 11:00:00
D=`echo ${D} | cut -d"+" -f1` 類似這樣?
作者: rickieyang (Rickie Yang)   2016-04-05 11:10:00
awk 的 print 會吃掉空白, 用 printf 或是空白加上""太長了, 一行貼不上來, 且讓我回文占一下版面...
作者: LIAR (玻璃做的大叔)   2016-04-05 11:17:00
fdisk -lu /dev/sda|grep ^/dev/sda|awk '{print $1"\t"$2"\t"$3"\t"$4}' | read A B C D&&echo $B $D,沒印出東西read不吃管線啊?看來我得sed一行一行抓了
作者: rickieyang (Rickie Yang)   2016-04-05 23:35:00
把指令用 awk 印出來,pipe 給 sh -

Links booklink

Contact Us: admin [ a t ] ucptt.com