如何从文件列中替换特殊字符

时间:2014-07-29 17:03:36

标签: shell unix

我有一个包含6列的文件,每个字段由管道分隔,第二列包含金额字段。

 140121059|01/01/201400:00:45|[1390]|[387]|17.64|10    
 140121060|01/01/201400:00:46|[1112]|[867]|26.46|10    
 140121062|01/01/201400:00:47|[182]|[13]|4,117.60|10    
 140121065|01/01/201400:00:48|[1088]|[385]|1,147.04|10   

我想从金额列中删除commA,因为我无法对此列进行某些操作。 ,并未列入所有专栏。我正在使用bash。

1 个答案:

答案 0 :(得分:1)

使用awk

awk -F '|' -v OFS='|' '{ gsub(/,/, "", $5) } 1' file

输出:

 140121059|01/01/201400:00:45|[1390]|[387]|17.64|10    
 140121060|01/01/201400:00:46|[1112]|[867]|26.46|10    
 140121062|01/01/201400:00:47|[182]|[13]|4117.60|10    
 140121065|01/01/201400:00:48|[1088]|[385]|1147.04|10    
  • -F '|' -v OFS='|'将输入字段分隔符和输出字段分隔符设置为管道|。这基本上将列分隔符设置为|
  • gsub(/,/, "", $5)删除第5列中的所有逗号。
  • 1命令实际打印。
  • 如果输入没有使用额外的空格缩进,则会出现相同的输出。

使用bash

while IFS='|' read -ra LINE; do LINE[4]=${LINE[4]//,}; IFS='|' eval 'echo "${LINE[*]}"'; done < file