如何使用 awk 从列中删除和替换字段分隔符?

如何使用 awk 从列中删除和替换字段分隔符?

我有这样的 CSV 文件:

name_var;type_var;
id;string;
dt_depot;string;
num_artc;string

我想删除第一个;并替换最后一个,, 以便输出如下所示:

name_var type_var,
id string,
dt_depot string,
num_artc string

答案1

简单地用sed替换:

$ sed 's/;$/,/; s/;/ /g' file
name_var type_var,
id string,
dt_depot string,
num_artc string

至于awk解决方案,如果输入文件应该只包含 2 个填充列 - 您可以使用以下awk表达式:

$ awk -F";" '{ if (NF==3) $2=$2","; print $1,$2 }' file
name_var type_var,
id string,
dt_depot string,
num_artc string

答案2

$ awk -F';' '{sub(/;$/,","); $1=$1} 1' file
name_var type_var,
id string,
dt_depot string,
num_artc string

该脚本更改;行末尾的每个字符,然后通过向字段分配值来,将剩余的每个字符转换为,这会导致所有输入字段分隔符(由 设置)更改为输出字段分隔符(默认情况下为空白)。然后,它通过指定调用默认操作 ( ) 的真条件 (1) 来打印当前行。;,;-F';'print $0

答案3

awk类似的东西可以完成这项工作:

awk -F\; '{print $1" "$2","}'

如果您不喜欢最后一个逗号,可以这样重写:

 awk -F\; '{ if (NF != 2) print $1" "$2","; else  print $1" "$2;}'

答案4

使用此命令:

awk '{sub(/;$/,",")sub(/;/," ")}1' file

你得到这个输出:

name_var type_var,
id string,
dt_depot string,
num_artc string

相关内容