Awk
如何將2個匹配模式之間的文本提取到多個文件?
我有二進製文件,我想按 START 和 END 模式將其拆分為單獨的文件。輸入範例:
yut786y= 3&*%^#$%fsd{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64 asduf hfna089FUAO AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha fq9w46tygvkabsdjfnhc :End}}fji8yEBFBOA NFmc
類似的塊(但不相同)可以在輸入文件中重複
結果應該是:
{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64 asduf hfna089FUAO AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha fq9w46tygvkabsdjfnhc :End}}
每個文件塊
我嘗試
awk '/{'\''StartOfFile'\'':/,/End}}/' file > export;
然後awk '/StartOfFile/{filename=NR".txt"}; {print >filename}' export
拆分為文件。但是第一行和最後一行仍然有不需要的字元。如何切割它們?字元和數量未知
您可以使用以下單個 awk 執行此操作:
awk -v RS="{'StartOfFile'" 'NR>1{sub(/End}}.*/,"End}}"); print RS$0>NR-1".txt"}' infile
我在下面的範例輸入上執行:
{'StartOfFile': Unix.stackexchange.com End}} yut786y= 3&*%^#$%fsd{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64 asduf hfna089FUAO AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha fq9w46tygvkabsdjfnhc :End}}fji8yEBFBOA NFmc 72 YOY398Y 9Y9&y&*t*#&y(*yH{'StartOfFile':uih4yUH OG8YG*^t&^t*&o y(yt&*wt*&(0 jfhi hwuw hfuweh012r892u 098Y&*T*#^98 yHO OFUH idueg&*#trt& goe ouh#ye(e#y( geiyfgefyg #O WIBCJHvKKJSLSDOLSL*6 asds:End}}JKDSHFLAJHFLAJSDHFLIAUHFILU7869786
輸出 was/is 如下拆分為 3 個文件:
1.txt
{'StartOfFile': Unix.stackexchange.com End}}
2.txt
{'StartOfFile': sdflklfasdgjw723gsdf67asfr55a64 asduf hfna089FUAO AHF78QAB6A SDFADSFGfh asiug6a8osiofh7qw8e6fgha fq9w46tygvkabsdjfnhc :End}}
3.txt
{'StartOfFile':uih4yUH OG8YG*^t&^t*&o y(yt&*wt*&(0 jfhi hwuw hfuweh012r892u 098Y&*T*#^98 yHO OFUH idueg&*#trt& goe ouh#ye(e#y( geiyfgefyg #O WIBCJHvKKJSLSDOLSL*6 asds:End}}