忽略空字段

时间:2013-04-18 08:23:31

标签: bash awk

鉴于此文件

$ cat foo.txt
,,,,dog,,,,,111,,,,222,,,333,,,444,,,
,,,,cat,,,,,555,,,,666,,,777,,,888,,,
,,,,mouse,,,,,999,,,,122,,,133,,,144,,,

我可以像这样打印第一个字段

$ awk -F, '{print $5}' foo.txt
dog
cat
mouse

但是我想忽略那些空字段,以便我可以这样调用

$ awk -F, '{print $1}' foo.txt

5 个答案:

答案 0 :(得分:4)

您可以这样使用:

$ awk -F',+' '{print $2}' file
dog
cat
mouse

同样,你可以使用3美元,4美元和5美元等等。在这种情况下不能使用$ 1,因为记录以分隔符开头。

答案 1 :(得分:1)

$ awk '{print $1}' FPAT=[^,]+ foo.txt
dog
cat
mouse

答案 2 :(得分:0)

awk -F, '{gsub(/^,*|,*$/,"");gsub(/,+/,",");print $1}' your_file

测试如下:

> cat temp
,,,,dog,,,,,111,,,,222,,,333,,,444,,,
,,,,cat,,,,,555,,,,666,,,777,,,888,,,
,,,,mouse,,,,,999,,,,122,,,133,,,144,,,

执行:

> awk -F, '{gsub(/^,*|,*$/,"");gsub(/,+/,",");print $1}' temp
dog
cat
mouse

答案 3 :(得分:0)

您可以使用tr -s 'field'删除字段的多次重复:

$ tr -s ',' < your_file
,dog,111,222,333,444,
,cat,555,666,777,888,
,mouse,999,122,133,144,

然后您可以通过以下方式访问dog等,

$ tr -s ',' < your_file | awk -F, '{print $2}'
dog
cat
mouse

答案 4 :(得分:0)

perl -anF,+ -e 'print "$F[1]\n"' foo.txt
dog
cat
mouse

这不是awk但你会使用1而不是2。