Измените значение c столбца в файле данных - PullRequest
0 голосов
/ 10 апреля 2020

Изменить спецификацию c значение столбца в файле данных

Пример: файл: input_file.out_RD содержит данные ниже

6710|GB|LONDON|10
6700|GB|LONDON|20
6703|GB|LONDON|15
6876|GB|LONDON|60

Теперь нужно удвоить значения столбца номер 4, поэтому выходной файл должен быть: final_file.out_RD

6710|GB|LONDON|20
6700|GB|LONDON|40
6703|GB|LONDON|30
6876|GB|LONDON|120

Ответы [ 3 ]

3 голосов
/ 10 апреля 2020

ИМХО awk должно быть быстрее, чем решение оболочки, пожалуйста, попробуйте следующее.

awk 'BEGIN{FS=OFS="|"} {$NF=2 * $NF} 1' Input_file
3 голосов
/ 10 апреля 2020

Вы можете сказать что-то вроде:

awk 'BEGIN {FS = OFS = "|"} {$4 *= 2} 1' input_file.out_RD > final_file.out_RD

Результат:

6710|GB|LONDON|20
6700|GB|LONDON|40
6703|GB|LONDON|30
6876|GB|LONDON|120
0 голосов
/ 10 апреля 2020

Следующий скрипт помогает решить проблему:

#!/bin/sh

#input file from which a specific  column to be multiplied
my_file="/tmp/test/input_file.out_RD"

#multiplication factor value
multiplication_factor=2.00

while IFS= read -r line
do
        #read a line from input file and redirect to temporary file tmp_file.txt
        echo "$line" >tmp_file.txt

        #extract the forth column value from  temp_file.txt
        original_forth_col_value=`awk -F "|" '{print $4}' tmp_file.txt`

        #calculate the final forth column value
        final_forth_col_value=$(echo "$original_forth_col_value * $multiplication_factor" | bc )
        echo $final_forth_col_value

        #place the final forth column value in the output file --> final_file.out_RD
        awk -v fv=$final_forth_col_value  -F "|" 'BEGIN {OFS=FS}{$4=fv;print}' tmp_file.txt >> final_file.out_RD
done < "$my_file"
...