2013-02-13 60 views
2

我试图将使用awk命令的值分割为三部分。需要帮助打入3使用awk将单行分割为多行使用awk编码格式

内容= 1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %

我希望以上内容闯入编号系统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 % 

我已经通过下面的命令尝试:

echo $content | awk -F"3. " '{ print $2 }' 

,我也得到

31683 (<server03>: du.size[/,free] : 3.5 % 

同样,对于别人,但还是未能获得样本以正确的编号格式输出,如上所示。

任何人都可以帮助我吗?

回答

4

你可以使用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 % 
+0

非常感谢......它的工作原理:-) – San 2013-02-13 06:07:14

+3

你能不能解释一下这个命令,它paramers呢? – 2014-12-11 18:31:39

1

尝试

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}}' 
+0

最后两行的不必要的前导空白看起来像最后两个是第一个的子行.. – San 2013-02-15 05:27:19

+0

感谢您指出,我没有真正测试我的代码。我已经做出了改变,现在它工作正常 – 2013-02-15 05:59:05

4

%符号看起来像一个很好的候选分割上。尝试:

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 % 
+0

你的答案完美无缺:-)谢谢。 – San 2013-02-15 05:28:02

+0

@San:如果这是你要找的东西,别忘了接受它。干杯。 – Steve 2013-02-15 06:07:26

1

资料就会显示在固定的元素个数。

{ 
    print $1, $2, $3, $4, $5, $6, $7 
    print $8, $9, $10, $11, $12, $13, $14 
    print $15, $16, $17, $18, $19, $20, $21 
} 

很有用的,如果你必须做任何事情与打印它以外的其他数据。

3
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 % 
+1

这适用于Mac电脑,其中sed将\ n和n视为同一件事。 – 2016-09-29 23:04:07