如果我有一个像“sn”这样的字符串:“1 $$$$ 12056597.3,2595585.69 $$”,我怎么能用awk来分割“1 $$$$”
我试过
**cat $filename | awk -F "\"1\$\$\$\$" '{ print $2 }'**
**cat $filename | awk -F "\"1$$$$" '{ print $2 }'**
但都失败了
答案 0 :(得分:2)
任意数量的$ use
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命令 set ,它将打印在shell解释任何转义字符后传递给awk的参数。替换了shell变量
在这种情况下,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正则表达式中解释为$ anyway。至少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
答案 1 :(得分: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}'