【发布时间】:2020-02-20 04:49:30
【问题描述】:
要求: 导入大型制表符分隔的文本文件,从 3.5 到 550 万行不等。 仅将匹配的行导出到单独的文件中。
文件内容(行尾也有标签):
Id TypeId SField File ADate AField CField Status RDate Rec FiId CRec
15773363 2614 ZZ HL3 07/06/12 3271.75 3050.00 PPP 11/23/12 698
25073163 3215 ZZ TDU 12/04/17 1204.56 CCR 716 P304
25259159 3215 ZZ TDU 01/04/18 539.44 CCR 649 P303
25677650 3259 ZZ TDU 03/03/18 872.06 CCR 653 P101
26096141 3259 ZZ TDU 05/03/18 880.61 CCR 647 P201
26282137 3215 ZZ TDU 06/04/18 1247.27 CCR 698 P304
26979622 3258 ZZ TDU 09/04/18 1942.33 1000.00 ACT 698 PP89
27212145 3215 ZZ TDU 10/03/18 2487.54 CCR 609 P202
27444640 3258 ZZ H5 11/03/18 23182.36 2635.00 BBB 640 1234 PP89
27909630 3216 ZZ XC8 01/04/19 3370.00 ACT 691 P316
28560616 3259 ZZ BDX 04/03/19 460.98 ACT 607 P100
25073192 3215 ZZ TDU 12/04/17 445.50 CCR 713 1234 P202
25259188 3215 ZZ TDU 01/04/18 899.35 CCR 667 P303
25677679 3259 ZZ TDU 03/03/18 3863.95 CCR 18328 P101
26096170 3259 ZZ TDU 05/03/18 10321.97 BBB 649 8754 P402
我需要读入这个文件并只将填充了 FiId 的行导出到一个新文件中。
我有这样的效果:
((Get-Content $InFile -Raw -ReadCount 4000) -Match "(?m)^.*\t[0-9]{1,4}\t[A-Z0-9]{0,9}\t$") |
Set-Content $OutFile
我已经测试了正则表达式和变体 [https://regex101.com/r/jJ39oy/1] 但是我不能让它只导出我想要的东西。它要么导出整个文件,要么不导出任何内容。我每天需要从这个文件中导出大约 30k 行。
【问题讨论】:
-
您的样本数据中没有任何选项卡...这使得几乎不可能确定哪些数据与哪一列对应。 [sigh ...] ///// 还有,
Fild列在哪里?我看到看起来像Rec FiId- 实际上是两列吗? -
试试
Get-Content $InFile | Select-String -Pattern '^.*\t[0-9]{1,4}\t[A-Z0-9]{0,9}\s*$' | Select -ExpandProperty line | Set-Content $OutFile,见this thread -
再次复制/粘贴样本数据,但仍会转换为制表符。链接的正则表达式上有标签。
标签: regex powershell