我试图将awk命令分成三部分。 需要帮助打入3。
内容= 1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %
我想在编号系统中将上述内容分成三行。
所需的示例输出:
1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %
我已经尝试了以下命令:
echo $content | awk -F"3. " '{ print $2 }'
我得到了
31683 (<server03>: du.size[/,free] : 3.5 %
对于其他人也是如此,但是仍然没有以上面所示的正确的编号格式获取样本输出。
谁可以帮我这个事 ?
你可以使用sed
来代替:
sed "s#[^^]\([0-9]\.\) #\n\1 #g"
例:
[~/Desktop] ==> echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | sed "s#[^^]\([0-9] \.\) #\n\1 #g" 1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %
%
符号看起来是一个很好的候选人分裂。 尝试:
sed 's/% /%\n/g'
测试:
echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | sed 's/% /%\n/g'
结果:
1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %
perl -pe 's/(\d+\.\s)/\n$1/g'
测试:
> echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | perl -pe 's/(\d+\.\s)/\n$1/g' 1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %
您的数据显示固定的元素数量。
{ print $1, $2, $3, $4, $5, $6, $7 print $8, $9, $10, $11, $12, $13, $14 print $15, $16, $17, $18, $19, $20, $21 }
如果您必须对除打印之外的其他数据进行任何操作,这一点很有用。
尝试
echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | awk '{n = split($0,array,"%"); for (i = 0; i < n-1; ++i){gsub("^ ","",array[i+1]);print array[i+1]" %",i}}'