Ubuntu环境下移除TXT文件中仅单个空白行分隔的空白行
解决Ubuntu下移除单行空白行、保留多行空白行的问题
你的需求可以通过awk轻松实现,先分析你之前尝试的命令为什么无效:
awk -F, '{gsub("\n","",$1); print}' archivo.txt:这个命令是替换每行内部的换行符,完全没有处理行与行之间的空白行,方向错误。sed 's/ //g' input.txt > no-spaces.txt:这个是删除所有空格字符,不是空白行,和需求不匹配。
正确的AWK脚本
下面的脚本会移除仅分隔两行的单个空白行,同时保留连续多个空白行:
awk ' /^$/ { cnt++; next } { # 遇到非空行时,若之前有多个空白行,全部输出 if (cnt > 1) { while (cnt--) print "" } print $0 cnt = 0 } END { # 处理文件末尾的空白行:单个空白行保留,多个空白行全部保留 if (cnt >= 1) { for (i=0; i<cnt; i++) print "" } } ' input.txt > output.txt
脚本逻辑说明
- 遇到空白行时,累加计数器
cnt,跳过当前行处理。 - 遇到非空行时:
- 如果之前累积了多个空白行(
cnt>1),先输出所有累积的空白行,再输出当前非空行。 - 如果之前只有单个空白行(
cnt=1),直接输出当前非空行,跳过那个空白行。
- 如果之前累积了多个空白行(
- 文件末尾的空白行全部保留,无论单个还是多个。
测试示例
假设输入文件内容:
第一行内容 第二行内容 第三行内容 第四行内容
处理后输出:
第一行内容 第二行内容 第三行内容 第四行内容
可以看到,分隔两行的单个空白行被移除,连续的两个空白行被完整保留。
内容的提问来源于stack exchange,提问作者jdedsec
相关产品推荐
相关产品推荐

