Bash 在某个字段的字符串中追加字符

Bash 在某个字段的字符串中追加字符,bash,shell,awk,sed,Bash,Shell,Awk,Sed,我熟悉sed-awk和grep的基本知识。我有一个包含11个字段的文件。在第10和第11栏,我有纬度和经度坐标。它们的结构如下:-555。我想做的是在两个字段的两位数后插入句点。所以期望的结果是-55.5555。使用awk/sed或任何其他工具,我最好的解决方法是什么 文件样本: 01 00460 Adamsville city AL 4161 1554 0000007948 0000000000 +33595542 -086957993 通过sed sed 's/^\( *

我熟悉sed-awk和grep的基本知识。我有一个包含11个字段的文件。在第10和第11栏,我有纬度和经度坐标。它们的结构如下:-555。我想做的是在两个字段的两位数后插入句点。所以期望的结果是-55.5555。使用awk/sed或任何其他工具,我最好的解决方法是什么

文件样本:

01 00460 Adamsville city     AL    4161   1554 0000007948 0000000000 +33595542 -086957993
通过sed

sed 's/^\( *\([^ ]\+ \+\)\{4\}-*[0-9]\{2\}\)\([^ ]* \+-*[0-9]\{2\}\)/\1.\3./' file
示例:

$ cat file
foo v v v -5555555 55555
$ sed 's/^\( *\([^ ]\+ \+\)\{4\}-*[0-9]\{2\}\)\([^ ]* \+-*[0-9]\{2\}\)/\1.\3./' file
foo v v v -55.55555 55.555
使用awk,您可以执行以下操作:

awk '{for (i=NF-1; i<=NF; i++) sub(/^[-+]?[0-9][0-9]/, "&.", $i)} 1' file
01 00460 Adamsville city AL 4161 1554 0000007948 0000000000 +33.595542 -08.6957993

awk'{for(i=NF-1;iawk中不使用正则表达式的我的解决方案

echo " 1 2 3 4 -5555555"|awk '{print substr($5, "1","3") "." substr($5,"4") }'
-55.55555

说明:打印前3个字符(包括
-
符号)、一个句点,然后打印剩余的字符。

使用普通的旧bash,使用子字符串模式匹配是最简单的方法:

 a="5555555 55555"; b=-${a/555/55.}; b=${b/\ 55555/ 55.55.};  echo "b: $b"
  -55.5555 55.55

对于所需的确切结果,我有些困惑。如果需要调整,请告诉我。

1是什么意思在awk命令结束时做什么?@anubhava
1
表示默认操作,即打印输出。嗯,我在我的文件上尝试了这个操作,但是没有更改字段。我添加了一个文件示例谢谢!!通过一些小游戏,你的答案对我有效!我看到了6个以上的字段。我更新了这个问题,我打算更改last两个字段。那么我的方法在这里不起作用