You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下如何对指定行范围删除空白分隔文本的最后4列

实现方法

你的需求可以直接用awk实现,它天然支持任意空白符作为字段分隔符,且可以按行号范围执行不同处理逻辑,是最适配该场景的方案:

方案1:awk 实现(推荐,无兼容问题)

直接执行如下命令即可:

awk 'NR<776{print; next} {for(i=1;i<=21;i++) printf "%s%s", $i, (i==21?"\n":" ")}' 待处理文件路径 > 处理后输出文件路径

命令逻辑说明:

  • NR是awk内置的行号计数变量,当行号小于776时,直接输出原行内容,跳过后续处理,保证前775行和原文件完全一致
  • 对于776行及之后到文件末尾的内容,遍历输出前21个字段,自动丢弃后面多出来的4个0字段,输出时字段间用空格分隔,和前面行的格式、列数完全对齐
  • 该方案自动识别连续空格、制表符等任意空白分隔符,不需要额外做格式转换,不会出现列偏移问题。

方案2:cut 组合命令实现

如果你倾向于用你提到的cut命令,可以通过分块读取文件的方式实现,注意cut默认不支持连续空白作为单个分隔符,需要先压缩连续空白:

(
head -n 775 待处理文件路径
tail -n +776 待处理文件路径 | tr -s '[:blank:]' | cut -d ' ' -f 1-21
) > 处理后输出文件路径

注意:该方案存在一定局限,如果文件中存在行首空白、字段间混合多种空白符的情况,可能出现列计数偏移,优先选择awk方案。

内容的提问来源于stack exchange,提问作者Glee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:45:37