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

シェル内のエスケープ文字に関する問題のデバッグを支援するために、シェルがエスケープ文字を解釈してシェル変数を置き換えた後に awk に渡される引数を出力する、組み込みのシェル コマンドセットを使用できます。

この場合、シェルは最初に \$ をプレーンな $ のエスケープとして解釈します。

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 に答える