awk の printf や bash の printf を使って、列内のすべての数値を小数点以下 1 桁に丸める、すっきりとした簡単な方法がいくつかあるようです。しかし、列内のすべての数値を小数点以下 1 桁に減らす (ただし切り上げはしない) だけの、同じように簡単な方法が見つかりません。現時点でこれをソートする最も簡単な方法は、小数点以下 2 桁に丸めてから、列 1 のすべての行から最後の文字を削除することです。これよりよい方法を知っている人はいませんか? 入力と出力の例は次のようになります。
入力
123.434
1456.8123
2536.577
345.95553
23643.1454
出力
123.4
1456.8
2536.5
345.9
23643.1
答え1
簡単にgrep
$ cat ip.txt
123.434
1456.8123
2536.577
345.95553
23643.1454
$ grep -o '^[0-9]*\.[0-9]' ip.txt
123.4
1456.8
2536.5
345.9
23643.1
^
行の先頭[0-9]*
0 以上の数字\.
リテラルドット文字に一致[0-9]
数字に一致する-o
オプションが使用されているためgrep
、一致した部分のみが印刷され、残りの文字が効果的に削除されます。
他の列がある場合は、sed
$ cat ip.txt
123.434 a
1456.8123 b
2536.577 c
345.95553 d
23643.1454 e
$ sed -E 's/^([0-9]*\.[0-9])[0-9]*/\1/' ip.txt
123.4 a
1456.8 b
2536.5 c
345.9 d
23643.1 e
-E
拡張正規表現を使用する- 必要なパターンは置換セクションでキャプチャされ
()
、使用されます\1
[0-9]*
キャプチャグループが削除された後
参考文献: