我熟悉sed awk和grep的基础知识。我有一个包含11个字段的文件。在第10和第11领域,我有纬度和经度坐标。它们的结构如下:-5555555。我想要做的是在两个字段中的两位数之后插入句点。所以期望的结果将是-55.5555。使用awk / sed或任何其他工具,我最好的方法是什么?
档案样本:
01 00460 Adamsville city AL 4161 1554 0000007948 0000000000 +33595542 -086957993
答案 0 :(得分:3)
使用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命令在最后2个字段的开头搜索正则表达式模式[-+]?[0-9][0-9]
,并将其替换为匹配的文本+点。
答案 1 :(得分:2)
通过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
答案 2 :(得分:0)
我的解决方案在awk中没有使用正则表达式
echo " 1 2 3 4 -5555555"|awk '{print substr($5, "1","3") "." substr($5,"4") }'
-55.55555
说明:打印前3个字符(包括-
个符号),一个句点,然后是剩余的字符。
答案 3 :(得分:0)
使用普通的旧bash,使用子串模式匹配是最简单的方法:
a="5555555 55555"; b=-${a/555/55.}; b=${b/\ 55555/ 55.55.}; echo "b: $b"
-55.5555 55.55
我对所需的确切结果感到有些困惑。如果需要调整,请告诉我。