![数値に影響を与えずにファイルの文字列を区切り文字に置き換えるにはどうすればよいですか? [閉鎖]](https://linux33.com/image/120544/%E6%95%B0%E5%80%A4%E3%81%AB%E5%BD%B1%E9%9F%BF%E3%82%92%E4%B8%8E%E3%81%88%E3%81%9A%E3%81%AB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%96%87%E5%AD%97%E5%88%97%E3%82%92%E5%8C%BA%E5%88%87%E3%82%8A%E6%96%87%E5%AD%97%E3%81%AB%E7%BD%AE%E3%81%8D%E6%8F%9B%E3%81%88%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
入力ファイル:
123 exx abcdef 890 hello-hi-welcome and name in-India 1 3.45 1.3538 8.773
456 hfjgt 928 aetr-new-abc-India 1 9.7392 18.1903 8.752
出力:
123,exx abcdef,890,hello-hi-welcome and name in-India,1,3.45,1.3538,8.773
456,hfjgt,928,aetr-new-abc-India,1,9.7392,18.1903,8.752
そのためにシェルスクリプトをどのように書くのですか?
答え1
数字の前後の空白を変更すれば十分だと思います。
$ sed -r 's/([[:digit:]]) /\1,/g; s/ ([[:digit:]])/,\1/g' file
123,exx abcdef,890,hello-hi-welcome and name in-India,1,3.45,1.3538,8.773
456,hfjgt,928,aetr-new-abc-India,1,9.7392,18.1903,8.752
答え2
各行から数字項目と数字以外の項目を分離したいと思います。
牛に似た一種の栄養アッ解決策:
awk -v FPAT='[0-9]+|[0-9]+\\.[0-9]+|[^0-9]{2,}' '{
for(i=1;i<=NF;i++) {
gsub(/^ *| *$/,"",$i); printf "%s%s",$i,(i==NF? ORS:OFS)
}
}' OFS=',' file
出力:
123,exx abcdef,890,hello-hi-welcome and name in-India,1,3.45,1.3538,8.773
456,hfjgt,928,aetr-new-abc-India,1,9.7392,18.1903,8.752