2013-04-18 25 views
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 

回答

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

你可以這樣用:

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

同樣,您可以使用$ 3,$ 4和$ 5等。$ 1不能在這種情況下使用,因爲記錄以分隔符開頭。

+0

@sudo_O:無特殊原因,如such..you是正確的,它明確內部..更新它... – Guru

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

這將不會工作,如果字段將'',狗,foo ,,, 111 ,,,, 222 ,,, 333 ,,, 444 ,,, ,' – beny23

+0

@ beny23 ...好點。改變它來處理這種情況 – Vijay

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

我會做'tr -s','

+0

我試過'tr -s','file'但沒有工作。我知道可能有一種方法,謝謝@sudo_O! – fedorqui

+1

是的,'tr'只讀'stdin',所以在讀取文件時需要重定向! –

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

這是沒有的awk,但你會得到使用1而不是2