Shell-Script

根據匹配模式將 UNIX 中的文件拆分為多個文件

  • September 1, 2022

我的文件內容如下

#2211000000031#####{1:F01BKXXXX0AXXX0000000000}{2:I103BOTKJPJTXXXXN}{3:{121:faffba68-3ebe-4653-93fe-8b082ff226a5}}
{4:@@:20:EDCAK0010245@@:23B:CRED@@:32A:220303JPY10000,@@:33B:JPY10000,@@:50K:ABC@@WLG@@:52A:BKNZNZ20XXX@@:59:SUPER SERVICES LTD@@PO BOX 9999@@XX@@NEW YORK@@:70:/RFB/AUTOTEST-020356@@:71A:SHA@@-}  
#2211000000038#####{1:F01XXXX20AXXX0000000000}{2:I103BOTKJPJTXXXXN}{3:{121:50c659ec-6fb2-44a7-8312-26a270330aed}}{4:@@:20:ELCAK0020721@@:23B:CRED@@:32A:220303JPY1000,@@:33B:JPY1000,@@:50K:TESTAPP@@:52A:BKNZNZ20XXX@@:59:XYZ SERVICES LTD@@PO BOX 16130@@MARS@@CAL@@:70:/RFB/AUTOTEST-021013@@:71A:SHA@@-}  
#2211000002311#####< Saa:Body>< AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">< Fr>< FIId>< FinInstnId>< BICFI>BKNZNZ22985</ BICFI></ FinInstnId></ FIId></ Fr>< To>< FIId>< FinInstnId>< BICFI>BKNZNZ22985</ BICFI></ FinInstnId></ FIId></ To>< BizMsgIdr>2_1 Generic pacs 008</ BizMsgIdr>< MsgDefIdr>pacs.008.001.08</ MsgDefIdr>< BizSvc>swift.cbprplus.02</ BizSvc>< CreDt>2022-03-01T21:40:01+13:00</ CreDt></ AppHdr>< Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08">< FIToFICstmrCdtTrf>< GrpHdr>< MsgId>Generic Pacs 008</ MsgId>< CreDtTm>2021-12-09T07:08:54+12:00</ CreDtTm>< NbOfTxs>1</ NbOfTxs>< SttlmInf>< SttlmMtd>INDA</ SttlmMtd></ SttlmInf></ GrpHdr>< CdtTrfTxInf>< PmtId>< InstrId>Generic Pacs 008</ InstrId>< EndToEndId>Generic Pacs 008</ EndToEndId>< UETR>a19e9375-3e20-41ed-b75c-bb40d5afe540</ UETR></ PmtId>< IntrBkSttlmAmt Ccy="NZD">65.00</ IntrBkSttlmAmt>< IntrBkSttlmDt>2022-04-20</ IntrBkSttlmDt>< InstdAmt Ccy="NZD">1.00</ InstdAmt>< ChrgBr>SHAR</ ChrgBr>< PrvsInstgAgt1>< FinInstnId>< BICFI>NATAUS33</ BICFI></ FinInstnId></ PrvsInstgAgt1>< InstgAgt>< FinInstnId>< BICFI>BKNZNZ22985</ BICFI></ FinInstnId></ InstgAgt>< InstdAgt>< FinInstnId>< BICFI>BKNZNZ22985</ BICFI></ FinInstnId></ InstdAgt>< Dbtr>< Nm>REMITTING PERSON </ Nm>< PstlAdr>< StrtNm>A STREET NAME</ StrtNm>< BldgNb>999</ BldgNb>< BldgNm>THE BIG BUILDING</ BldgNm>< Flr>1</ Flr>< PstCd>1234</ PstCd>< TwnNm>A TOWN</ TwnNm>< TwnLctnNm>A COUNTY</ TwnLctnNm>< DstrctNm>WESTERN DISTRICT</ DstrctNm>< CtrySubDvsn>A STATE IN THE USA</ CtrySubDvsn>< Ctry>US</ Ctry></ PstlAdr></ Dbtr>< DbtrAgt>< FinInstnId/></ DbtrAgt>< CdtrAgt>< FinInstnId/ ></ CdtrAgt>< Cdtr>< Nm>A BENEFIARY PERSON</ Nm>< PstlAdr>< StrtNm>A BENEFICIARY ADDRESS</ StrtNm>< BldgNb>77</ BldgNb>< BldgNm>THE BUILDING WITH NO NAME</ BldgNm>< Flr>50</ Flr>< Room>4566</ Room>< PstCd>4556</ PstCd>< TwnNm>A BENEFICIARY TOWN</ TwnNm>< TwnLctnNm>A BENEFICIARY SUBURB</ TwnLctnNm>< DstrctNm>A DISTRICT</ DstrctNm>< CtrySubDvsn>A PROVINCE </ CtrySubDvsn>< Ctry>Cnty</ Ctry></ PstlAdr></ Cdtr>< CdtrAcct>< Id>< Othr>< Id>0209750998907040</ Id></ Othr></ Id></ CdtrAcct>< RmtInf>< Ustrd>REMITTANCE INFORMATION</ Ustrd></ RmtInf></ CdtTrfTxInf></ FIToFICstmrCdtTrf></ Document></ Saa:Body></ Saa:DataPDU>

背景:在前 2 行中,每一行都有一個 ref id 以 # 開頭和結尾。然後是用大括號括起來的簡訊。所以前 2 行在開始和結束 {} 處都有捲曲。雖然第 3 行也以 ref id 開頭,但之後它有一個 xml 標記以 <saa:body> 開頭並以 </Saa:Body> 結尾所以在文件 1 中,那些帶有 come 的記錄,其消息以 curly 開頭和結尾大括號{} 和 file2 將包含帶有 xml 標籤<> </>的記錄。

這些記錄只是出現在一個文本文件中,我需要創建一個 shell 腳本來讀取文本文件,然後

我必須把它分成2個文件,比如

第一個文件:

#2211000000031#####{1:F01BKXXXX0AXXX0000000000}{2:I103BOTKJPJTXXXXN}{3:{121:faffba68-3ebe-4653-93fe-8b082ff226a5}}{4:@@:20:EDCAK0010245@@:23B:CRED@@:32A:220303JPY10000,@@:33B:JPY10000,@@:50K:ABC@@WLG@@:52A:BKNZNZ20XXX@@:59:SUPER SERVICES LTD@@PO BOX 9999@@XX@@NEW YORK@@:70:/RFB/AUTOTEST-020356@@:71A:SHA@@-}  
#2211000000038#####{1:F01XXXX20AXXX0000000000}{2:I103BOTKJPJTXXXXN}{3:{121:50c659ec-6fb2-44a7-8312-26a270330aed}}{4:@@:20:ELCAK0020721@@:23B:CRED@@:32A:220303JPY1000,@@:33B:JPY1000,@@:50K:TESTAPP@@:52A:BKNZNZ20XXX@@:59:XYZ SERVICES LTD@@PO BOX 16130@@MARS@@CAL@@:70:/RFB/AUTOTEST-021013@@:71A:SHA@@-}

第二個文件:

#2211000002311#####&lt; Saa:Body&gt;&lt; AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02"&gt;&lt; Fr&gt;&lt; FIId&gt;&lt; FinInstnId&gt;&lt; BICFI&gt;BKNZNZ22985&lt;/ BICFI&gt;&lt;/ FinInstnId&gt;&lt;/ FIId&gt;&lt;/ Fr&gt;&lt; To&gt;&lt; FIId&gt;&lt; FinInstnId&gt;&lt; BICFI&gt;BKNZNZ22985&lt;/ BICFI&gt;&lt;/ FinInstnId&gt;&lt;/ FIId&gt;&lt;/ To&gt;&lt; BizMsgIdr&gt;2_1 Generic pacs 008&lt;/ BizMsgIdr&gt;&lt; MsgDefIdr&gt;pacs.008.001.08&lt;/ MsgDefIdr&gt;&lt; BizSvc&gt;swift.cbprplus.02&lt;/ BizSvc&gt;&lt; CreDt&gt;2022-03-01T21:40:01+13:00&lt;/ CreDt&gt;&lt;/ AppHdr&gt;&lt; Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08"&gt;&lt; FIToFICstmrCdtTrf&gt;&lt; GrpHdr&gt;&lt; MsgId&gt;Generic Pacs 008&lt;/ MsgId&gt;&lt; CreDtTm&gt;2021-12-09T07:08:54+12:00&lt;/ CreDtTm&gt;&lt; NbOfTxs&gt;1&lt;/ NbOfTxs&gt;&lt; SttlmInf&gt;&lt; SttlmMtd&gt;INDA&lt;/ SttlmMtd&gt;&lt;/ SttlmInf&gt;&lt;/ GrpHdr&gt;&lt; CdtTrfTxInf&gt;&lt; PmtId&gt;&lt; InstrId&gt;Generic Pacs 008&lt;/ InstrId&gt;&lt; EndToEndId&gt;Generic Pacs 008&lt;/ EndToEndId&gt;&lt; UETR&gt;a19e9375-3e20-41ed-b75c-bb40d5afe540&lt;/ UETR&gt;&lt;/ PmtId&gt;&lt; IntrBkSttlmAmt Ccy="NZD"&gt;65.00&lt;/ IntrBkSttlmAmt&gt;&lt; IntrBkSttlmDt&gt;2022-04-20&lt;/ IntrBkSttlmDt&gt;&lt; InstdAmt Ccy="NZD"&gt;1.00&lt;/ InstdAmt&gt;&lt; ChrgBr&gt;SHAR&lt;/ ChrgBr&gt;&lt; PrvsInstgAgt1&gt;&lt; FinInstnId&gt;&lt; BICFI&gt;NATAUS33&lt;/ BICFI&gt;&lt;/ FinInstnId&gt;&lt;/ PrvsInstgAgt1&gt;&lt; InstgAgt&gt;&lt; FinInstnId&gt;&lt; BICFI&gt;BKNZNZ22985&lt;/ BICFI&gt;&lt;/ FinInstnId&gt;&lt;/ InstgAgt&gt;&lt; InstdAgt&gt;&lt; FinInstnId&gt;&lt; BICFI&gt;BKNZNZ22985&lt;/ BICFI&gt;&lt;/ FinInstnId&gt;&lt;/ InstdAgt&gt;&lt; Dbtr&gt;&lt; Nm&gt;REMITTING PERSON &lt;/ Nm&gt;&lt; PstlAdr&gt;&lt; StrtNm&gt;A STREET NAME&lt;/ StrtNm&gt;&lt; BldgNb&gt;999&lt;/ BldgNb&gt;&lt; BldgNm&gt;THE BIG BUILDING&lt;/ BldgNm&gt;&lt; Flr&gt;1&lt;/ Flr&gt;&lt; PstCd&gt;1234&lt;/ PstCd&gt;&lt; TwnNm&gt;A TOWN&lt;/ TwnNm&gt;&lt; TwnLctnNm&gt;A COUNTY&lt;/ TwnLctnNm&gt;&lt; DstrctNm&gt;WESTERN DISTRICT&lt;/ DstrctNm&gt;&lt; CtrySubDvsn&gt;A STATE IN THE USA&lt;/ CtrySubDvsn&gt;&lt; Ctry&gt;US&lt;/ Ctry&gt;&lt;/ PstlAdr&gt;&lt;/ Dbtr&gt;&lt; DbtrAgt&gt;&lt; FinInstnId/&gt;&lt;/ DbtrAgt&gt;&lt; CdtrAgt&gt;&lt; FinInstnId/ &gt;&lt;/ CdtrAgt&gt;&lt; Cdtr&gt;&lt; Nm&gt;A BENEFIARY PERSON&lt;/ Nm&gt;&lt; PstlAdr&gt;&lt; StrtNm&gt;A BENEFICIARY ADDRESS&lt;/ StrtNm&gt;&lt; BldgNb&gt;77&lt;/ BldgNb&gt;&lt; BldgNm&gt;THE BUILDING WITH NO NAME&lt;/ BldgNm&gt;&lt; Flr&gt;50&lt;/ Flr&gt;&lt; Room&gt;4566&lt;/ Room&gt;&lt; PstCd&gt;4556&lt;/ PstCd&gt;&lt; TwnNm&gt;A BENEFICIARY TOWN&lt;/ TwnNm&gt;&lt; TwnLctnNm&gt;A BENEFICIARY SUBURB&lt;/ TwnLctnNm&gt;&lt; DstrctNm&gt;A DISTRICT&lt;/ DstrctNm&gt;&lt; CtrySubDvsn&gt;A PROVINCE &lt;/ CtrySubDvsn&gt;&lt; Ctry&gt;Cnty&lt;/ Ctry&gt;&lt;/ PstlAdr&gt;&lt;/ Cdtr&gt;&lt; CdtrAcct&gt;&lt; Id&gt;&lt; Othr&gt;&lt; Id&gt;0209750998907040&lt;/ Id&gt;&lt;/ Othr&gt;&lt;/ Id&gt;&lt;/ CdtrAcct&gt;&lt; RmtInf&gt;&lt; Ustrd&gt;REMITTANCE INFORMATION&lt;/ Ustrd&gt;&lt;/ RmtInf&gt;&lt;/ CdtTrfTxInf&gt;&lt;/ FIToFICstmrCdtTrf&gt;&lt;/ Document&gt;&lt;/ Saa:Body&gt;&lt;/ Saa:DataPDU&gt;

我對 UNIX shell 腳本的了解非常有限。行數會有所不同。

使用任何 awk:

$ awk '{print &gt; ((/{/ ? "x" : "y") ".txt")}' file

$ head *.txt
==&gt; x.txt &lt;==
#2211000000031#####{1:F01BKXXXX0AXXX0000000000}{2:I103BOTKJPJTXXXXN}{3:{121:faffba68-3ebe-4653-93fe-8b082ff226a5}}
{4:@@:20:EDCAK0010245@@:23B:CRED@@:32A:220303JPY10000,@@:33B:JPY10000,@@:50K:ABC@@WLG@@:52A:BKNZNZ20XXX@@:59:SUPER SERVICES LTD@@PO BOX 9999@@XX@@NEW YORK@@:70:/RFB/AUTOTEST-020356@@:71A:SHA@@-}
#2211000000038#####{1:F01XXXX20AXXX0000000000}{2:I103BOTKJPJTXXXXN}{3:{121:50c659ec-6fb2-44a7-8312-26a270330aed}}{4:@@:20:ELCAK0020721@@:23B:CRED@@:32A:220303JPY1000,@@:33B:JPY1000,@@:50K:TESTAPP@@:52A:BKNZNZ20XXX@@:59:XYZ SERVICES LTD@@PO BOX 16130@@MARS@@CAL@@:70:/RFB/AUTOTEST-021013@@:71A:SHA@@-}

==&gt; y.txt &lt;==
#2211000002311#####&lt; Saa:Body&gt;&lt; AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.02"&gt;&lt; Fr&gt;&lt; FIId&gt;&lt; FinInstnId&gt;&lt; BICFI&gt;BKNZNZ22985&lt;/ BICFI&gt;&lt;/ FinInstnId&gt;&lt;/ FIId&gt;&lt;/ Fr&gt;&lt; To&gt;&lt; FIId&gt;&lt; FinInstnId&gt;&lt; BICFI&gt;BKNZNZ22985&lt;/ BICFI&gt;&lt;/ FinInstnId&gt;&lt;/ FIId&gt;&lt;/ To&gt;&lt; BizMsgIdr&gt;2_1 Generic pacs 008&lt;/ BizMsgIdr&gt;&lt; MsgDefIdr&gt;pacs.008.001.08&lt;/ MsgDefIdr&gt;&lt; BizSvc&gt;swift.cbprplus.02&lt;/ BizSvc&gt;&lt; CreDt&gt;2022-03-01T21:40:01+13:00&lt;/ CreDt&gt;&lt;/ AppHdr&gt;&lt; Document xmlns="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08"&gt;&lt; FIToFICstmrCdtTrf&gt;&lt; GrpHdr&gt;&lt; MsgId&gt;Generic Pacs 008&lt;/ MsgId&gt;&lt; CreDtTm&gt;2021-12-09T07:08:54+12:00&lt;/ CreDtTm&gt;&lt; NbOfTxs&gt;1&lt;/ NbOfTxs&gt;&lt; SttlmInf&gt;&lt; SttlmMtd&gt;INDA&lt;/ SttlmMtd&gt;&lt;/ SttlmInf&gt;&lt;/ GrpHdr&gt;&lt; CdtTrfTxInf&gt;&lt; PmtId&gt;&lt; InstrId&gt;Generic Pacs 008&lt;/ InstrId&gt;&lt; EndToEndId&gt;Generic Pacs 008&lt;/ EndToEndId&gt;&lt; UETR&gt;a19e9375-3e20-41ed-b75c-bb40d5afe540&lt;/ UETR&gt;&lt;/ PmtId&gt;&lt; IntrBkSttlmAmt Ccy="NZD"&gt;65.00&lt;/ IntrBkSttlmAmt&gt;&lt; IntrBkSttlmDt&gt;2022-04-20&lt;/ IntrBkSttlmDt&gt;&lt; InstdAmt Ccy="NZD"&gt;1.00&lt;/ InstdAmt&gt;&lt; ChrgBr&gt;SHAR&lt;/ ChrgBr&gt;&lt; PrvsInstgAgt1&gt;&lt; FinInstnId&gt;&lt; BICFI&gt;NATAUS33&lt;/ BICFI&gt;&lt;/ FinInstnId&gt;&lt;/ PrvsInstgAgt1&gt;&lt; InstgAgt&gt;&lt; FinInstnId&gt;&lt; BICFI&gt;BKNZNZ22985&lt;/ BICFI&gt;&lt;/ FinInstnId&gt;&lt;/ InstgAgt&gt;&lt; InstdAgt&gt;&lt; FinInstnId&gt;&lt; BICFI&gt;BKNZNZ22985&lt;/ BICFI&gt;&lt;/ FinInstnId&gt;&lt;/ InstdAgt&gt;&lt; Dbtr&gt;&lt; Nm&gt;REMITTING PERSON &lt;/ Nm&gt;&lt; PstlAdr&gt;&lt; StrtNm&gt;A STREET NAME&lt;/ StrtNm&gt;&lt; BldgNb&gt;999&lt;/ BldgNb&gt;&lt; BldgNm&gt;THE BIG BUILDING&lt;/ BldgNm&gt;&lt; Flr&gt;1&lt;/ Flr&gt;&lt; PstCd&gt;1234&lt;/ PstCd&gt;&lt; TwnNm&gt;A TOWN&lt;/ TwnNm&gt;&lt; TwnLctnNm&gt;A COUNTY&lt;/ TwnLctnNm&gt;&lt; DstrctNm&gt;WESTERN DISTRICT&lt;/ DstrctNm&gt;&lt; CtrySubDvsn&gt;A STATE IN THE USA&lt;/ CtrySubDvsn&gt;&lt; Ctry&gt;US&lt;/ Ctry&gt;&lt;/ PstlAdr&gt;&lt;/ Dbtr&gt;&lt; DbtrAgt&gt;&lt; FinInstnId/&gt;&lt;/ DbtrAgt&gt;&lt; CdtrAgt&gt;&lt; FinInstnId/ &gt;&lt;/ CdtrAgt&gt;&lt; Cdtr&gt;&lt; Nm&gt;A BENEFIARY PERSON&lt;/ Nm&gt;&lt; PstlAdr&gt;&lt; StrtNm&gt;A BENEFICIARY ADDRESS&lt;/ StrtNm&gt;&lt; BldgNb&gt;77&lt;/ BldgNb&gt;&lt; BldgNm&gt;THE BUILDING WITH NO NAME&lt;/ BldgNm&gt;&lt; Flr&gt;50&lt;/ Flr&gt;&lt; Room&gt;4566&lt;/ Room&gt;&lt; PstCd&gt;4556&lt;/ PstCd&gt;&lt; TwnNm&gt;A BENEFICIARY TOWN&lt;/ TwnNm&gt;&lt; TwnLctnNm&gt;A BENEFICIARY SUBURB&lt;/ TwnLctnNm&gt;&lt; DstrctNm&gt;A DISTRICT&lt;/ DstrctNm&gt;&lt; CtrySubDvsn&gt;A PROVINCE &lt;/ CtrySubDvsn&gt;&lt; Ctry&gt;Cnty&lt;/ Ctry&gt;&lt;/ PstlAdr&gt;&lt;/ Cdtr&gt;&lt; CdtrAcct&gt;&lt; Id&gt;&lt; Othr&gt;&lt; Id&gt;0209750998907040&lt;/ Id&gt;&lt;/ Othr&gt;&lt;/ Id&gt;&lt;/ CdtrAcct&gt;&lt; RmtInf&gt;&lt; Ustrd&gt;REMITTANCE INFORMATION&lt;/ Ustrd&gt;&lt;/ RmtInf&gt;&lt;/ CdtTrfTxInf&gt;&lt;/ FIToFICstmrCdtTrf&gt;&lt;/ Document&gt;&lt;/ Saa:Body&gt;&lt;/ Saa:DataPDU&gt;

如果您的實際輸入可以{&lt;塊中包含 s 或反之亦然,則編輯您在問題中提供的範例以供我們測試以包括此類案例以及任何其他非晴天案例,然後我們可以調整正則表達式以適應。

引用自:https://unix.stackexchange.com/questions/715614