numfmtで付けたカンマはsedやawkで外す

numfmtの–groupingオプションによる、,(カンマ)付けって、便利ではあるけれど、

takk@deb9:~/tmp$ numfmt --grouping 1000 20000 300000
1,000
20,000
300,000
takk@deb9:~/tmp$

,(カンマ)を外す、–ungroupingオプションって無いですよね。

takk@deb9:~/tmp$ numfmt --ungrouping 1,000 20,000 300,000
numfmt: オプション '--ungrouping' を認識できません
Try 'numfmt --help' for more information.
takk@deb9:~/tmp$

,(カンマ)を外したいときは、どうすればよいでしょう。

いつものごとく、実験用テキスト作成。

takk@deb9:~/tmp$ seq 1000 100 2400 | pr -t5J | numfmt --grouping --field - | tee a.txt
1,000 1,300 1,600 1,900 2,200
1,100 1,400 1,700 2,000 2,300
1,200 1,500 1,800 2,100 2,400
takk@deb9:~/tmp$ 

numfmtには–ungroupingはないですが、,(カンマ)を取り除くこと自体は、別にnumfmtを使う必要もないです。
“,”を””に置換するだけですので、tr等で容易にできてしまいます

takk@deb9:~/tmp$ tr -d , < a.txt
1000 1300 1600 1900 2200
1100 1400 1700 2000 2300
1200 1500 1800 2100 2400
takk@deb9:~/tmp$ 

あるいは、sedでも良いですね。

takk@deb9:~/tmp$ sed 's/,//g' a.txt
1000 1300 1600 1900 2200
1100 1400 1700 2000 2300
1200 1500 1800 2100 2400
takk@deb9:~/tmp$ 

awkでも良いでしょう。要するに、普段使い慣れた置換ツール使えば良いんです。

takk@deb9:~/tmp$ awk '{gsub(",","");print}' a.txt
1000 1300 1600 1900 2200
1100 1400 1700 2000 2300
1200 1500 1800 2100 2400
takk@deb9:~/tmp$ 

いやいや、これでは全置換なので、numfmtの–fieldオプションのように列指定できないじゃないか。

そのまま、列を指定しましょう。2列目だけ,(カンマ)を外してみます。

takk@deb9:~/tmp$ awk '{gsub(",","",$2);print}' a.txt
1,000 1300 1,600 1,900 2,200
1,100 1400 1,700 2,000 2,300
1,200 1500 1,800 2,100 2,400
takk@deb9:~/tmp$ 

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA