Чтение из текста1 и запись в текст2

Простым решением было установить менеджер пакетов G-debi в Ubuntu 16.04 и загрузить файл .deb в ваш дом. затем выполните команду

    $ sudo gdebi <packagename>.deb

, и она будет установлена ​​плавно. Существует GUI-способ, но я не знаю, как его использовать, а запущенные команды проще.

2
задан 16 April 2018 в 11:56

4 ответа

Предполагая, что «плавающая точка» означает [-]d.ddde±dd «научная нотация», вы можете использовать awk

awk '/L_International_node-globe/ {printf("%e\n", $2)}' text1 > text2

Вы можете использовать спецификатор %g, если вы хотите, чтобы формат изменялся между %f и %e в зависимости от размера экспоненты.

2
ответ дан 17 July 2018 в 16:54

Оригинальный ответ

Следующая команда должна делать то, что вы хотите,

grep 'L_International_node-globe' text1|tr -s ' ' '\t'|cut -f 2 > text2 печатать строку с ключевым словом (и значением), которое вы хотите получить из файла text1 конвертировать пространственное разделение в TAB печатать второе поле (первое поле после ключевого слова) перенаправить вывод в файл text2

Я не уверен, что вы подразумеваете под float. Оболочка будет печатать символьную строку, а различные программы могут интерпретировать ее как число в формате float.

Изменить 1

OK, вы хотите, чтобы запятая была как десятичный разделитель. Это делается с заменой sed.

grep 'L_International_node-globe' text1|tr -s ' ' '\t'|cut -f 2 | sed 's/\./,/' > text2

Edit 2

В ответ на ваш предложенный shellscript я предлагаю следующую измененную версию:

#!/bin/bash if [ $# -ne 2 ] then echo " Usage: $0 <path/infile> <path/outfile> Example: $0 text1 text2" exit fi # extracting the value var=$(grep 'L_International_node-globe' "$1"|tr -s ' ' '\t'|cut -f 2) echo "debug1: $var" # install and use 'bc' # calculation; 'scale' sets the number of decimals in the output (truncated) var=$(echo "scale=3 $var/1000000000" | bc) #the result should be in Gigabits echo "debug2: $var" # conversion to comma as decimal separator var=${var/./,} echo "debug3: $var" echo "$var" > "$2" # after every execution the output file should have a new value

Примеры с данными из вашего исходного вопроса,

$ ./scriptname Usage: ./scriptname <path/infile> <path/outfile> Example: ./scriptname text1 text2 $ ./script-name text1 text2 ; echo '-----------';cat text2 debug1: 115911592756.879990 debug2: 115.911 debug3: 115,911 ----------- 115,911
2
ответ дан 17 July 2018 в 16:54

Предполагая, что «плавающая точка» означает [-]d.ddde±dd «научная нотация», вы можете использовать awk

awk '/L_International_node-globe/ {printf("%e\n", $2)}' text1 > text2

Вы можете использовать спецификатор %g, если вы хотите, чтобы формат изменялся между %f и %e в зависимости от размера экспоненты.

2
ответ дан 23 July 2018 в 17:45
  • 1
    OP просто хочет заменить десятичную запятую запятой, а как насчет {$0=$2;sub(/\./,",");print}? – dessert 13 April 2018 в 22:32

Оригинальный ответ

Следующая команда должна делать то, что вы хотите,

grep 'L_International_node-globe' text1|tr -s ' ' '\t'|cut -f 2 > text2 печатать строку с ключевым словом (и значением), которое вы хотите получить из файла text1 конвертировать пространственное разделение в TAB печатать второе поле (первое поле после ключевого слова) перенаправить вывод в файл text2

Я не уверен, что вы подразумеваете под float. Оболочка будет печатать символьную строку, а различные программы могут интерпретировать ее как число в формате float.

Изменить 1

OK, вы хотите, чтобы запятая была как десятичный разделитель. Это делается с заменой sed.

grep 'L_International_node-globe' text1|tr -s ' ' '\t'|cut -f 2 | sed 's/\./,/' > text2

Edit 2

В ответ на ваш предложенный shellscript я предлагаю следующую измененную версию:

#!/bin/bash if [ $# -ne 2 ] then echo " Usage: $0 <path/infile> <path/outfile> Example: $0 text1 text2" exit fi # extracting the value var=$(grep 'L_International_node-globe' "$1"|tr -s ' ' '\t'|cut -f 2) echo "debug1: $var" # install and use 'bc' # calculation; 'scale' sets the number of decimals in the output (truncated) var=$(echo "scale=3 $var/1000000000" | bc) #the result should be in Gigabits echo "debug2: $var" # conversion to comma as decimal separator var=${var/./,} echo "debug3: $var" echo "$var" > "$2" # after every execution the output file should have a new value

Примеры с данными из вашего исходного вопроса,

$ ./scriptname Usage: ./scriptname <path/infile> <path/outfile> Example: ./scriptname text1 text2 $ ./script-name text1 text2 ; echo '-----------';cat text2 debug1: 115911592756.879990 debug2: 115.911 debug3: 115,911 ----------- 115,911
2
ответ дан 23 July 2018 в 17:45

Другие вопросы по тегам:

Похожие вопросы: