умножение каждой строки

3 ответа

Так как это целочисленная арифметика, вы, вероятно, можете сделать это прямо в оболочке - например, в bash

while IFS="$IFS," read n x y; do printf '%d\n' "$((3*y))"; done < file > newfile

Testing to stdout

$ while IFS="$IFS," read n x y; do printf '%d\n' "$((3*y))"; done < file
34603008
25165824
3460299
47185920
9437184
62914560
59768832
2
27.01.2020, 23:15

Вот dc и sed делают работу:

#v#backref courtesy Stephane's comment#v#
sed 's/.*,\(.*\)/[&,]P\1 *3p/' <<-\DATA | dc
    1  1441792,11534336
    2  1048576,8388608
    3  1441792,1153433
    4  1966080,15728640
    5  393216,3145728
    6  2621440,20971520
    7  2490368,19922944
DATA

OUTPUT

1  1441792,11534336,34603008
2  1048576,8388608,25165824
3  1441792,1153433,3460299
4  1966080,15728640,47185920
5  393216,3145728,9437184
6  2621440,20971520,62914560
7  2490368,19922944,59768832

Это очень быстро.

Вы можете сделать то же самое без каких-либо обратных ссылок - если это имеет какое-то значение - таким образом:

 sed 's/^/[/;s/[^,]*$/&,]P& 3*p/' <file | dc

Если Вы не хотите, чтобы они все были вместе и хотите только результаты, то все равно проще:

sed 's/.*,//;s/$/ 3*p/' <file | dc

А если Вы хотите, чтобы строки были пронумерованы:

sed 's/.*,//;s/$/ 3*p/' <file | dc | nl
2
27.01.2020, 23:15

Вы также можете использовать awk

 awk -F "," '{print $2*3}' src.dat  > newfile

, где
src.dat - ваши исходные данные (вход)
новый файл новый файл один (выход)
-F "," использовать в качестве разделителя полей ,
$ 2 используется для второго поле (что после , )

2
27.01.2020, 23:15

Теги

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