2013-02-21 62 views
-1

沒有shell腳本,只有一行。什麼命令可以幫助你從一排切基於列值基於列值的Unix中的切割元素

例如:

118 Balboni,Steve 23 
11 Baker,Doug 0 
120 Armas,Tony 13 
133 Allanson,Andy 5 
158 Baines,Harold 13 
33 Bando,Chris 1 
44 Adduci,James 1 
50 Aguayo,Luis 3 
5 Allen,Rod 0 
94 Anderson,Brady 1 

如果有第三排不爲零,我怎麼完全刪除該行中的一個聲明?這可能在unix中嗎?

+1

第3排?或者你的意思是第三欄?你想要做多少種方法? 'awk','sed','perl','python'都可以輕鬆完成(有些比其他更容易)。 – 2013-02-21 07:16:54

回答

1

假設真正的問題是問「如果第三列是非零,不要打印」或(等效)'只打印行,如果第三列是0:

使用awk

awk '$3 == 0' data 

(。如果第三列是零,打印輸入;否則,忽略它你可以在0之後添加{ print }使動作顯式)

使用perl

perl -nae 'print if $F[2] == 0' data 

使用sed

sed -n '/ 0$/p' data 
0

使用grep:

grep '[^0-9]0$' input 
0

這是否就地更換。

perl -i -F -pane 'undef $_ if($F[2]!=0)' your_file 

測試:

> cat temp 
118 Balboni,Steve 23 
11 Baker,Doug 0 
120 Armas,Tony 13 
133 Allanson,Andy 5 
158 Baines,Harold 13 
33 Bando,Chris 1 
44 Adduci,James 1 
50 Aguayo,Luis 3 
5 Allen,Rod 0 
94 Anderson,Brady 1 
> 
> 
> perl -i -F -pane 'undef $_ if($F[2]!=0)' temp 
> cat temp 
11 Baker,Doug 0 
5 Allen,Rod 0 
> 
0

如果你想打印有沒有第三列,以及那些在第3列是明確0線(即,如果你考慮空白字段是零),嘗試:

awk '!$3' 

如果你不希望打印,只有2列線,嘗試:

awk 'NF>2 && !$3'