В ваших данных нет чисел выше 1. Я расширил исходный файл, включив в него некоторые значения с большим количеством цифр перед точкой:
$ cat infile
0.992957746478873 0.00704225352112677
0.646410833917366 0.353589166082634
0.992957746478873 0.00704225352112677
0.5 0.5
16.258137489137 333444.277775666
16.233399999999 333777.277111111
Одним из возможных решений является использование C-совместимой функции printf (В awk есть одна):
Точное число 3 (округленных )десятичных знаков:
$ awk '{ printf("%11.3f %11.3f\n", $1,$2) }' infile
0.993 0.007
0.646 0.354
0.993 0.007
0.500 0.500
16.258 333444.278
16.233 333777.277
Обратите внимание, что 0.992957746478873
округляется до 0.993
.
Точное количество 3 (значащих )цифр:
$ awk '{ printf("%9.3g %9.3g\n", $1,$2) }' infile
0.993 0.00704
0.646 0.354
0.993 0.00704
0.5 0.5
16.3 3.33e+05
16.2 3.34e+05
Обратите внимание на округление четвертой цифры (, например 3.34e+05)
Ровно 3 (не округленные )цифры после запятой.
Использование GNU awk:
$ gawk '{for(i=1;i<=NF;i++){
printf( "%12s ",gensub(/([0-9]+\.[0-9]{0,3}).*/, "\\1", "g", $i))};print""}
' infile
0.992 0.007
0.646 0.353
0.992 0.007
0.5 0.5
16.258 333444.277
16.233 333777.277
Использование sed (возможно быстрее):
$ sed -E 's/([0-9]+\.[0-9]{1,3})[^ ]*/\1/g' infile
0.992 0.007
0.646 0.353
0.992 0.007
0.5 0.5
16.258 333444.277
16.233 333777.277
DIRSTACK
является локальной переменной и не передается в скрипты, подоболочки, дочерние процессы и т.д. Я рекомендую вместо скрипта использовать функцию, загруженную в ваш .bashrc
.
Я использовал этот прием для извлечения стека каталогов во время каждой сессии. Раньше я сохранял его в файл. Я также могу импортировать / экспортировать в другие терминалы
Определите эту функцию в вашем.bashrc
stackd ()
{
SAVEIFS=$IFS;
IFS=$(echo -en "\n\b");
builtin cd $@ && builtin pushd "$PWD" > /dev/null;
dirs -l -p >> $HOME/.iostackd/dirstack && sort -u -o $HOME/.iostackd/dirstack $HOME/.iostackd/dirstack > /dev/null;
IFS=$SAVEIFS
}
перегрузите встроенный "cd" псевдонимом
alias cd='stackd "$1"'