无法使用awk打印具有空格的字段的完整值

时间:2013-11-18 12:44:05

标签: awk

您好我正在尝试使用awk获取用户名列的值。

Username      User ID  User RID  User Info  Default Group  Home Directory      System shell  Additional Groups  Last Modified
------------  -------  --------  ---------  -------------  ------------------  ------------  -----------------  -------------
cifsusr          2006      2001             cifsgrp        /home/cifsusr       /bin/false                       1384753795319
releaseuser2     2005      2005             releasegr      /home/releaseuser2  /bin/false                       1384512529604
reus1            2009      2002             regr           /home/reus1         /bin/false                       1384511241736
reus2            2003      2003             regr           /home/reus2         /bin/false                       1384511283150
test usr11       2007      2006             cifsgrp        /home/test usr11    /bin/false                       1384773833130
test_usr00       2002      2004             cifsgrp        /home/test_usr00    /bin/false                       1384773358129

但每次尝试时我都错过了一个中间有空格的用户名, 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

由于每列的宽度都是固定的,因此可以使用带有-c选项的cut命令。使用您的文件

$ cut -c 1-14 file
Username      
------------  
cifsusr       
releaseuser2  
reus1         
reus2         
test usr11    
test_usr00 

或者使用awk,您可以使用substr功能:

awk '{print substr($0,1,14)}' file

答案 1 :(得分:1)

如果您的用户名列不会超过标题-------(第2行),则可以使用此单行

awk 'NR==2{l=length($1);next}$0=substr($0,1,l)' file

它假定文本格式正确。但是,用户名的长度可以是变量。不需要硬编码。

输出:

cifsusr     
releaseuser2
reus1       
reus2       
test usr11  
test_usr00