如果我有一个像“sn”这样的字符串:“1$$$$12056597.3,2595585.69$$”,我如何使用 awk 来拆分“1$$$$”
我试过了
**cat $filename | awk -F "\"1\$\$\$\$" '{ print $2 }'**
**cat $filename | awk -F "\"1$$$$" '{ print $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
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}'