如何使用awk在txt文件开头插入编号1到2059的FID列?
实现方案
基础命令(制表符分隔)
将命令中input.txt替换为你的实际文件名,处理后的结果会保存到output.txt:
awk 'NR == 1 {print "FID\t" $0} NR > 1 {print (NR - 1) "\t" $0}' input.txt > output.txt
命令逻辑说明
NR是awk内置的行号变量,代表当前正在处理的行的序号- 第一行(
NR==1)属于表头行,直接在原行内容前拼接FID和制表符后输出 - 第二行及以后属于数据行,输出
当前行号-1作为FID值(第二行对应编号1,最后一行对应编号=文件总行数-1,正好匹配你要求的1到2059的编号范围),拼接制表符和原行内容后输出
对齐优化版本
如果需要和你示例中的空格对齐效果一致,可以使用格式化输出的版本,调整占位宽度即可匹配原有列的对齐格式:
# %-4s 代表左对齐占4个字符宽度,可根据实际需要调整数值 awk 'NR == 1 {printf "%-4s%s\n", "FID", $0} NR > 1 {printf "%-4d%s\n", NR - 1, $0}' input.txt > output.txt
直接修改原文件
如果你使用的是GNU awk(绝大多数Linux发行版默认自带),可以直接加参数修改原文件,不需要额外生成输出文件:
gawk -i inplace 'NR == 1 {printf "%-4s%s\n", "FID", $0} NR > 1 {printf "%-4d%s\n", NR - 1, $0}' input.txt
内容的提问来源于stack exchange,提问作者HKJ3
相关产品推荐
相关产品推荐

