Shell 更改数据文件中的特定列值

Shell 更改数据文件中的特定列值,shell,csv,awk,delimiter,Shell,Csv,Awk,Delimiter,更改数据文件中的特定列值 例如:文件: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 以下脚本有助于解决此问题: #!/bi

更改数据文件中的特定列值

例如:文件: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

以下脚本有助于解决此问题:

#!/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"
#/垃圾箱/垃圾箱
#要从中乘以特定列的输入文件
my_file=“/tmp/test/input_file.out_RD”
#乘法因子值
乘法系数=2.00
而IFS=读取-r行
做
#从输入文件中读取一行并重定向到临时文件tmp_file.txt
echo“$line”>tmp_file.txt
#从temp_file.txt中提取第四列值
原始值=`awk-F“|”'{print$4}'tmp_file.txt`
#计算最后的第四列值
最终第四列值=$(回显“$原始第四列值*$乘法系数”| bc)
回显$final\u forth\u col\u值
#将最后第四列值放入输出文件-->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
完成<“$my_文件”

IMHO
awk
应该比shell解决方案快,请尝试以下操作

awk 'BEGIN{FS=OFS="|"} {$NF=2 * $NF} 1' Input_file

你可能想说一些类似的话:

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

如果您的输出中有输入错误,无法看到值翻倍,请您编辑您的问题一次。更正。谢谢@ravindersingh13安全,谢谢。若我的答案对你们有帮助,你们可以把它标记为接受答案Bahubali Jee,你们可以尝试一下解决方案吗?若那个对你们有帮助,请告诉我。