替换指定列的字符

时间:2019-04-08 08:58:26

标签: shell awk

我正在编辑一个文件,其中我必须用空格替换第2列的连字符。我尝试使用gsub,但无法显示结果

awk '{gsub(/\"|\-/,"",$2)}1' events

输入文件

xxxxx 2019-04-03 19:40:51.310 1.7615 31.1994 10
xxxxx 2019-04-02 01:22:48.140 -7.2965 114.5721 35
xxxxx 2019-04-01 23:05:28.610 -7.2121 114.537 21

预期结果应该是

xxxxx 2019 04 03 19:40:51.310 1.7615 31.1994 10
xxxxx 2019 04 02 01:22:48.140 -7.2965 114.5721 35
xxxxx 2019 04 01 23:05:28.610 -7.2121 114.537 21

3 个答案:

答案 0 :(得分:1)

您可以仅使用以下awk命令,在其中仅将第二个字段中的所有-替换为空格

echo 'xxxxx 2019-04-02 01:22:48.140 -7.2965 114.5721 35' | awk '{gsub(/-/," ",$2);print }'
xxxxx 2019 04 02 01:22:48.140 -7.2965 114.5721 35

然后只在整个文件上运行它。

awk '{gsub(/-/," ",$2)} 1' events

答案 1 :(得分:0)

您能否尝试使用sed来跟踪,专门编写和测试提供的示例(假设您仅根据显示的示例在第二个字段中有破折号)。

sed  's/\([^ ]*\) \([^-]*\)-\([^-]*\)-\([^-]*\)\(.*\)/\1 \2 \3 \4 \5/' Input_file

输出如下。

xxxxx 2019 04 03 19:40:51.310 1.7615 31.1994 10 
xxxxx 2019 04 02 01:22:48.140  -7.2965 114.5721 35
xxxxx 2019 04 01 23:05:28.610  -7.2121 114.537 21

答案 2 :(得分:0)

适用于这种情况的简单sed:

 sed 's/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)/\1 \2 \3/' file