如何拆分“1 $$$$”使用awk

时间:2013-10-17 01:44:37

标签: linux shell

如果我有一个像“sn”这样的字符串:“1 $$$$ 12056597.3,2595585.69 $$”,我怎么能用awk来分割“1 $$$$”

我试过

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

但都失败了

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}'