我需要编写一个 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