根据条件创建重复记录

根据条件创建重复记录

我需要编写一个 shell 脚本,在其中必须根据条件创建重复记录,然后更改将创建的新行的列中的值。

我正在尝试根据条件创建重复记录,然后替换重复行中的列。

例子:

输入将是

列 1、列 2、列 3、列 4、列 5

1234,abcd,abcd,wxyz,USD
2345,abcd,abcd,wxyz,USD
3456,abcd,abcd,wxyz,EUR

如果最后一列即; col5 是欧元,则应根据列值的更改再创建一行。

输出应该是

第 1 列、第 2 列、第 3 列、第 4 列、第 5 列

1234,abcd,abcd,wxyz,USD
2345,abcd,abcd,wxyz,USD
3456,abcd,abcd,wxyz,EUR
3456,abcd,abcd,wxyz,AUD

答案1

这里有几种方法:

  • awk

    awk -F, '{print; if($NF=="EUR"){$NF="AUD"; OFS=",";print}}' file
    

    即检查最后一个字段 ( $NR) 以检查另一个字段,更改$NR$N,其中 N 是您要检查的数字(例如$3第 5 个字段)。

  • 珀尔

    perl -pe '$_.= "$1AUD\n" if /(.*)EUR$/' file 
    

    这个使用了很多 Perl 速记法,有点难以解释。你可以这样写同样的事情:

    perl -e 'while(<>){if(/(.*)EUR$/){print "$_","$1AUD\n"} else {print "$_"}}' 
    

对于输入文件的每一行

答案2

使用sed

 sed -e 's|^\(.*\),EUR$|\1,EUR\r\1,AUD|'

答案3

Perl 的替代品

perl -ne 'print;print if s/EUR\Z/AUD/' your_file

如果您想就地修改文件,只需添加开关-i

perl -ni -e 'print;print if s/EUR\Z/AUD/' your_file

相关内容