EmEditor中CSV筛选后指定列前插入分隔符的技术问询
问题描述
我有一个20列、数百万行的CSV表格(分隔符为|),数据为公开自愿披露信息。已筛选出第20列为空的目标行(筛选条件为第19列值匹配^(One Manager OR More Than One Manager OR All LLC Member(s))),需要对这些行执行以下操作:
- 将第19列的内容(包括仅含换行符的情况)移至第20列
- 第19列置空
本质是要在目标行的第19列左侧插入分隔符|,此前尝试通过搜索替换分隔符的方式未找到正确的列操作方法。
示例数据
ENTITY_NAME|ENTITY_NUM|INITIAL_FILING_DATE|JURISDICTION|ENTITY_STATUS|STANDING_SOS|ENTITY_TYPE|FILING_TYPE|FOREIGN_NAME|STANDING_FTB|STANDING_VCFCF|STANDING_AGENT|SUSPENSION_DATE|LAST_SI_FILE_NUMBER|LAST_SI_FILE_DATE|PRINCIPAL_ADDRESS|MAILING_ADDRESS|PRINCIPAL_ADDRESS_IN_CA|LLC_MANAGEMENT_STRUCTURE|TYPE_OF_BUSINESS |3553873|02/25/2013|ILLINOIS|Active|Good|Stock Corporation - Out of State - Stock|Foreign|"HARRIS ELEVATOR"|Good|Good|Good||LBA285834|Mar 2 2022 12:00AM|521 NORTH ILLINOIS STREET ATWOOD IL 61913|521 NORTH ILLINOIS STREET ATWOOD IL 61913||ELEVATOR MANUFACTURING |2680629|09/27/2004|NEVADA|Terminated|Good|Stock Corporation - Out of State - Stock|Foreign|"RS47"|Good|Good|Good|2008-12-26 00:00:00.000|LBA55830|Aug 1 2007 12:00AM|8383 WILSHIRE BLVD #116 BEVERLY HILLS CA 90211|8383 WILSHIRE BLVD #116 BEVERLY HILLS CA 92708|8383 WILSHIRE BLVD #116 BEVERLY HILLS CA 92708|PERSONAL CARE PRODUCTS #1 CASH 4 JEWELS, INC.|3326312|10/26/2010|CALIFORNIA|Terminated|Good|Stock Corporation - CA - General|Domestic||Good|Good|Good|2013-04-02 00:00:00.000|LBA413061|May 1 2013 12:00AM|11069 WARNER AVE FOUNTAIN VALLEY CA 92708|11069 WARNER AVE FOUNTAIN VALLEY CA 92708|11069 WARNER AVE FOUNTAIN VALLEY CA 92708|JEWELRY BUYING
解决方案
推荐使用awk处理,它适合高效操作大体积CSV文件,直接按列处理无需复杂的搜索替换:
基础版(仅处理第20列为空的行)
awk -F'|' -v OFS='|' ' NR == 1 {print; next} $20 ~ /^[[:space:]]*$/ { $20 = $19 $19 = "" } 1' input.csv > output.csv
进阶版(同时匹配第19列筛选条件+第20列为空)
如果需要在命令中直接整合筛选条件(无需提前筛选行),可以使用:
awk -F'|' -v OFS='|' ' NR == 1 {print; next} $19 ~ /^(One Manager|More Than One Manager|All LLC Member\(s\))$/ && $20 ~ /^[[:space:]]*$/ { $20 = $19 $19 = "" } 1' input.csv > output.csv
命令说明
-F'|':指定输入分隔符为|-v OFS='|':指定输出分隔符为|,保证输出格式与原文件一致NR == 1 {print; next}:保留表头行,直接输出不做处理$20 ~ /^[[:space:]]*$/:匹配第20列为空或仅含空白字符(包括换行符)的行- 对匹配的行,将第19列内容赋值给第20列,随后清空第19列
- 最后的
1:输出所有行(处理后的目标行+未匹配的正常行)
该命令直接将处理结果输出到新文件output.csv,不会修改原文件,适合处理数百万行的大文件,内存占用低、处理速度快。
内容的提问来源于stack exchange,提问作者Nicholas Yocca
相关产品推荐
相关产品推荐

