如何替换特定列的分隔符

如何替换特定列的分隔符

这是abc.txt文件由 5 列组成:

ID|first name|middle name|last name|address 
1 | john     | whatever  | smith   | somewhere

我如何获得这个输出:

ID|first name middle name last name|address
1 | john whatever smith            |somewhere

如何'|'仅将特定列上的空格替换为新文件定义.txt。在本例中,从第 2 列到第 4 列。

答案1

awk解决方案:

awk 'BEGIN{ FS=OFS="|" }{ cs=$2$3$4; gsub(/ +/, " ", cs); print $1,sprintf("%-32s",cs),$5 }' abc.txt
  • FS=OFS="|"- 字段分隔符

  • cs=$2$3$4- 连接第二、第三和第四字段

  • gsub(/ +/, " ", cs)- 删除多余的空格

  • sprintf("%32s",cs)- 格式化的连接字符串


输出:

ID|first namemiddle namelast name  |address 
1 | john whatever smith            | somewhere

答案2

使用sed

sed -e 's,|\([^|]*\)|\([^|]*\)|,|\1 \2 ,' abc.txt > def.txt

这里是一个很好的介绍,涵盖了所使用的s功能。

相关内容