0

如果我有一个像“sn”这样的字符串:“1$$$$12056597.3,2595585.69$$”,我如何使用 awk 来拆分“1$$$$”

我试过了

**cat $filename | awk -F "\"1\$\$\$\$" '{ print $2 }'**
**cat $filename | awk -F "\"1$$$$" '{ print $2 }'**

但都失败了

4

2 回答 2

2

任意数量的 $ 使用

echo '"1$$$$12056597.3,2595585.69$$"' | awk -F '"1[$]+' '{ print $2 }'

正好 4 次使用

echo '"1$$$$12056597.3,2595585.69$$"' | awk -F '"1[$]{4}' '{ print $2 }'

为了帮助调试 shell 中的转义字符问题,您可以使用内置的 shell 命令,该命令集将在 shell 解释任何转义字符并替换 shell 变量后打印传递给 awk 的参数

在这种情况下,shell 首先将 \$ 解释为普通 $ 的转义

set -x
echo '"1$$$$12056597.3,2595585.69$$"'|awk -F "\"1\$\$\$\$" '{ print $2 }'
+ echo '"1$$$$12056597.3,2595585.69$$"'
+ awk -F '"1$$$$' '{ print $2 }'

您可以使用 \$ 以便 \$ 到达 awk,但无论如何 \$ 在 awk 正则表达式中被解释为 $。至少 awk 足以警告你......

echo '"1$$$$12056597.3,2595585.69$$"'|awk -F "\"1\\$\\$\\$\\$" '{ print $2 }'
+ echo '"1$$$$12056597.3,2595585.69$$"'
+ awk -F '"1\$\$\$\$' '{ print $2 }'
awk: warning: escape sequence `\$' treated as plain `$'

关闭调试

set +x
于 2013-10-17T01:54:49.400 回答
0
echo '"1$$$$12056597.3,2595585.69$$"' | awk -F '"1[$]+' '{ print $2 }' |sed 's/.\{3\}$//'

或者,如果您想拆分两个浮点数:

echo '"1$$$$12056597.3,2595585.69$$"' | awk -F '"1[$]+' '{ print $2 }' |sed 's/.\{3\}$//' |awk 'BEGIN {FS=","};{print $1}'

echo '"1$$$$12056597.3,2595585.69$$"' | awk -F '"1[$]+' '{ print $2 }' |sed 's/.\{3\}$//' |awk 'BEGIN {FS=","};{print $2}'
于 2013-10-17T03:12:08.787 回答