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

如何用awk/shell/sed为文本文件末尾加列:前2000行填0,后3000行填1

针对你需要给文本文件末尾新增一列,前2000行填'0'、接下来3000行填'1'的需求,我整理了几个实用的实现方案,覆盖awk、Shell和sed三种工具,你可以根据自己的熟悉程度选择:

1. AWK 方案(最推荐)

AWK天生擅长处理行和列的操作,代码简洁且效率高:

awk '{if (NR <= 2000) print $0, "0"; else if (NR <= 5000) print $0, "1"; else print $0}' input.txt > output.txt

解释:

  • NR是AWK的内置变量,代表当前处理的行号
  • 前2000行:在每行末尾追加 0(注意用空格分隔新列和原内容)
  • 2001到5000行:追加 1
  • 超过5000行的内容保持原样(如果文件行数多于5000)
  • 结果输出到output.txt,避免直接修改原文件(更安全)

如果你想直接修改原文件(仅GNU AWK支持),可以加-i inplace参数:

awk -i inplace '{if (NR <=2000) print $0,"0"; else if (NR <=5000) print $0,"1"; else print $0}' input.txt
2. Shell 脚本方案

用head和tail拆分文件后分别处理,适合不熟悉AWK的用户:

# 创建临时文件存储结果
touch temp.txt

# 处理前2000行,添加列值0
head -n 2000 input.txt | while read -r line; do echo "$line 0"; done > temp.txt

# 处理第2001到5000行,添加列值1
tail -n +2001 input.txt | head -n 3000 | while read -r line; do echo "$line 1"; done >> temp.txt

# 处理剩余行(如果文件行数超过5000)
tail -n +5001 input.txt >> temp.txt

# 替换原文件(可选,执行前请确认原文件已备份)
mv temp.txt input.txt

解释:

  • 用head -n 2000提取前2000行,tail -n +2001提取从2001行开始的内容
  • while read -r line逐行读取并追加列值
  • 最后合并所有处理后的内容到临时文件,再替换原文件
3. Sed 方案(适合熟悉Sed的用户)

Sed通过行地址范围和替换命令实现,代码紧凑:

sed -e '1,2000s/$/ 0/' -e '2001,5000s/$/ 1/' input.txt > output.txt

解释:

  • 1,2000s/$/ 0/:对1到2000行,将行尾($)替换为 0,实现追加列的效果
  • 2001,5000s/$/ 1/:同理处理2001到5000行
  • 超过5000行的内容不做修改

如果要直接修改原文件,加-i参数(仅GNU Sed支持):

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:10:27