Lubuntu22.04下基于sed实现GEDCOM大文本文件的条件编辑
处理GEDCOM文件中DEAT段的DATE BET替换需求
直接用系统自带的awk命令就能搞定,高效处理65万行的大文件也没问题,命令如下:
awk '/1 DEAT/ {flag=1} flag && /^[^1]/ {sub(/2 DATE BET/, "2 DATE AFT")} /^1/ {flag=0} 1' input.ged > output.ged
命令逻辑说明:
- 匹配到包含
1 DEAT的行时,开启替换标记flag=1 - 标记开启后,只要行首不是
1,就把该行里的2 DATE BET替换成2 DATE AFT - 再次遇到行首为
1的行时,关闭替换标记flag=0 - 最后那个
1是awk的简写,意思是输出所有行
如果需要直接修改原文件(务必先备份原文件!),可以用gawk的原地修改功能:
gawk -i inplace '/1 DEAT/ {flag=1} flag && /^[^1]/ {sub(/2 DATE BET/, "2 DATE AFT")} /^1/ {flag=0} 1' input.ged
内容的提问来源于stack exchange,提问作者nexturejohn
相关产品推荐
相关产品推荐

