2017-04-11 51 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