2017-04-11 52 views
2

我想比較每個單元格的大小/長度並根據其長度更改其內容。在Unix腳本中比較每個單元格的大小

的當前表是我想替換具有長度大於「2」 DE多個小區格式

AB 
CD 
AB 
AB 
CD 
155668/01 
AB 
1233/10 

輸出

AB 
CD 
AB 
AB 
CD 
DE 
AB 
DE 

我試圖

awk -F "," '{ if($(#1) > "2") {print "DE"} else {print $1 }}' 

它說語法錯誤。 如果我使用wc -m if $(#輸出是相同的輸入。

回答

1

試試這個 -

$ awk '{print (length($1)>2?"DE":$1)}' f 
AB 
CD 
AB 
AB 
CD 
DE 
AB 
DE 
+0

這工作得很好。謝謝。 –

2

最簡單的方法是使用sed

sed '/^..$/!s/.*/DE/' file 

awk,你可以說:

awk '!/^..$/ { $0 = "DE" } 1' file 

在這兩種情況下,這個想法是一樣的:如果該行不包括恰好兩個字符,用DE替換整行。在sed的情況下,整行是.*,在awk的情況下,它是$0

+0

兩者都工作得很好。謝謝。你能解釋一下代碼嗎? –

0

的慣用方法是:

awk 'length($1) > 2 { $1 = "DE" } 1' 
+0

你的意思是分配給'$ 1'嗎? –

+0

@MichaelVehrs:是的,謝謝。下次只需進行編輯:-) – Thor