我是脚本编写的新手,但是有这个问题:
我有一个具有超过10万条记录的文件。
我需要根据特定位置从文件中删除一些记录
就像如果在位置38至45中存在“ AB123”,则应在启动sql加载程序之前从文件中删除该行。
任何人都可以帮助我。
答案 0 :(得分:0)
您应该使用较小的文件测试解决方案。 我用
制作了一个测试文件<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<!-- ko if: loadingData -->
<img src="https://i.giphy.com/media/3oEjI6SIIHBdRxXI40/giphy.webp">
<!-- /ko -->
<button data-bind="click: callServer">Call</button>
每第11行的位置要长一个位置,ABC在这些行的位置10开始。如何只删除这些行?
您从头开始计算(for ((i=0;i<50;i++)); do echo "$((i%11))exampleABC123..$i" ; done > inputfile
,接受9个随机字符(^
),后跟应该匹配的字符串,然后删除这些字符(.{9}
)
/d
当您拥有更多规则时,搜索表达式将变得更加困难。
假设您还想删除以5开头或以9结尾的行。
sed -r '/^.{9}ABC123/d' inputfile
如果您有更多规则,请制作一个配置文件(并添加注释即可),例如sed -r '/^.{9}ABC123|^5|9$/d' inputfile
exclude.sed
现在使用配置中给出的规则来解析输入
/^.{9}ABC123/d # Search for ABC123 on position 10
/^5/d # Lines starting with a 5
/9$/d # Lines finishing with a 9