AWK脚本:如何使用awk删除字段分隔符

时间:2010-06-02 12:29:19

标签: shell awk

需要以下输出

ONGC044 
ONGC043
ONGC042
ONGC041
ONGC046
ONGC047

来自此输入

Medium Label                   Medium ID                            Free Blocks
===============================================================================
[ONGC044] ECCPRDDB_FS_43       ac100076:4aed9b39:44f0:0001            195311616
[ONGC043] ECCPRDDB_FS_42       ac100076:4aed9b1d:44e8:0001            195311616
[ONGC042] ECCPRDDB_FS_41       ac100076:4aed9af4:4469:0001            195311616
[ONGC041] ECCPRDDB_FS_40       ac100076:4aed9ad3:445e:0001            195311616
[ONGC046] ECCPRDDB_FS_44       ac100076:4aedd04a:68c6:0001            195311616
[ONGC047] ECCPRDDB_FS_45       ac100076:4aedd4a0:6bf5:0001            195311616

4 个答案:

答案 0 :(得分:6)

awk -F"[][]" 'NR>2{print $2}' file

答案 1 :(得分:3)

如果数据真的那么统一,那就是一个非常简单的管道:

cut -b 2-8

会为你做的。

(哦,除了前两行;如果你需要,可以在你的管道中用grep ^\[删掉它们)

答案 2 :(得分:3)

我认为你想要的是:

awk '/^\[.*\]/  {print substr($1,2,7)}' < ~/tmp/awk_test/file

这假定您的第一个字段每次正好是9个字符(其中7个是您想要的字符)。如果不是这种情况,那么请使用以下代码从第一个字段中删除[和]:

awk '/^\[.*\]/  {gsub(/[\[\]]/,"",$1); print $1 }' < ~/tmp/awk_test/file

答案 3 :(得分:1)

这是一个只涉及awk的解决方案。我们的想法是让awk解析所需的列并从此令牌中删除不需要的方括号。唯一的“技巧”是“逃避”[角色,以免它被理解为开放重新设置。 (我们也可以使用substr,因为括号是第一个和最后一个字符)

{
     #skip the column header lines
     if (NR < 3)
       next;

     # $1 is almost what we want: [xxxx] 
     #   ==> just remove the square brackets
     sub("[[]", "", $1);
     sub("]", "", $1);
     print $1;
}