如何使用Notepad++移除大型ASCII文件的最后一列?
删除大型文件最后一列的解决方案
针对你需要删除大型文件最后一列(含单词、数字、特殊字符、带引号句子)的需求,以下是几种高效的命令行解决方案:
方法1:使用awk(精准处理带空格的引号字段)
适合最后一列包含带空格的引号字符串的场景,通过定义字段匹配规则准确识别列:
awk -v FPAT='[^[:space:]]+|"[^"]+"' '{for(i=1;i<NF;i++) printf "%s ", $i; print ""}' input.txt > output.txt
FPAT指定字段格式:要么是不含空格的普通内容,要么是双引号包裹的任意内容(包括空格)- 循环打印前
NF-1个字段,最后添加换行符,保留前几列的格式
方法2:使用sed(正则匹配删除)
通过正则精准匹配行尾的最后一列,直接删除:
sed -E 's/[[:space:]]([^[:space:]]|"[^"]*")$//' input.txt > output.txt
[[:space:]]定位最后一个分隔空格([^[:space:]]|"[^"]*")匹配最后一列的两种情况:无空格的普通内容,或双引号包裹的内容$锚定行尾,将匹配内容替换为空
方法3:使用perl(灵活正则处理)
perl的正则语法更简洁,同样能处理带引号的特殊列:
perl -pe 's/ \s*(?:"[^"]*"|[^"\s]+)$//' input.txt > output.txt
- 匹配最后一个空格后,要么是双引号包裹的完整内容,要么是非空格非引号的普通内容,直到行尾并删除
以上方法均为流式处理,无需加载整个文件到内存,适合处理大型文件。
内容的提问来源于stack exchange,提问作者Bjoern
相关产品推荐
相关产品推荐

