[问题] 好几行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