我的文件看起来像:
invoice;123;456
invoice;789;012
total;912;468
我需要“如果第一个字段以“总计”开头,则在第三个字段中输入零”,这样我可以得到:
invoice;123;456
invoice;789;012
total;912;0
我熟悉 sed sintax,但使用字段远非我的能力。可能awk更方便......
谢谢!
我的文件看起来像:
invoice;123;456
invoice;789;012
total;912;468
我需要“如果第一个字段以“总计”开头,则在第三个字段中输入零”,这样我可以得到:
invoice;123;456
invoice;789;012
total;912;0
我熟悉 sed sintax,但使用字段远非我的能力。可能awk更方便......
谢谢!
awk 'BEGIN {FS = ";"; OFS=";"; } $1 ~ /^total/ { $3 = 0 } 1'
FS是输入字段分隔符,OFS是输出字段分隔符。
$1是第一个字段,我们检查它是否以total;开头 如果是这样,我们将第三个字段设置为 0。
1总是正确的,它会导致打印行。
sed 解决方案
sed -e 's/\(total;[0-9]\+;\)[0-9]*\(;*\)/\10\2/g' <file>
而不是-e,-i将更改文件本身。
第一组中的任何\(...)\内容实际上都是第一个字段,它被替换为\1,然后[0-9]*是任何数字,被替换为0,最后\(;*\)意味着如果存在任何其他字段,则将其替换为\2
这是一个sed解决方案
sed -i 's/\(^total;.*;\)\(.*\)/\10/g' file
(^total;.*;)(.*) -> (First group matches until the second semicolon)(Second group matches rest)
\10 -> Replacement is \1 (first group) + 0 (zero)