2016-11-23 239 views
-1

在空格分隔文件fic.txt中,如果最后一个值为'',则将其设置为'0'。awk:仅当值为NULL时将列值设置为'0'

实施例:

'A' 'B' 'C' '' 'E' '' | 
'X' 'O' 'Y' 'T' 'W' '1' | 

'A' 'B' 'C' '' 'E' '0' | 
'X' 'O' 'Y' 'T' 'W' '1' | 

我尝试:

awk '$6="\x27"0"\x27"' fic.txt - >要设置第6列的所有值为 '0'。有用。

但仍然问题只设置为'0'如果第6列是''。

感谢您的帮助。

+0

_if的最后一个值是 '' _ - 那是什么'| '在真正的最后一场? –

回答

3
awk '$6=="\047\047" { $6="\047"0"\047"} 1' fic.txt 

我建议为了学习AWK读AWK导游如thisthis

已更新:谢谢@Kent和@EdMorton的评论。

+1

你可以声明一个var:'-v q =''“',然后在代码中使用'q'。 – Kent

+1

总是使用八进制转义序列,而不是十六进制。请参阅http://awk.freeshell.org/PrintASingleQuote。 –

0
sed "s/'' |/'0' |/" fil 
'A' 'B' 'C' '' 'E' '0' | 
'X' 'O' 'Y' 'T' 'W' '1' | 

基于文件的结构,所有线路与管道“|”的结局。简单的sed搜索和替换将完成任务。要直接更改输入文件,请使用-i-i.bak标志与sed

0

在AWK使用sub更换'''是八进制\47)在 “最后一列”($6)与'0'

$ awk '{sub(/\47\47/, "\47" "0" "\47", $6)} 1' bar 
'A' 'B' 'C' '' 'E' '0' | 
'X' 'O' 'Y' 'T' 'W' '1' | 
相关问题