1

鉴于此文件

$ 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
4

5 回答 5

4

你可以这样使用:

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

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

于 2013-04-18T08:26:29.577 回答
1
$ awk '{print $1}' FPAT=[^,]+ foo.txt
dog
cat
mouse
于 2013-04-19T02:45:31.497 回答
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
于 2013-04-18T08:51:32.320 回答
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
于 2013-04-18T08:41:07.680 回答
0
perl -anF,+ -e 'print "$F[1]\n"' foo.txt
dog
cat
mouse

这不是 awk,但您将使用 1 而不是 2。

于 2013-04-18T09:19:23.127 回答