如何用awk/bash脚本对文本文件两列做减法并新增列存储结果
awk处理制表符分隔txt文件新增计算列方案
原有代码问题说明
第一段代码错误点
- 未指定输入字段分隔符
FS="\t",awk默认按任意空白拆分列,如果文件内容中包含空格,会导致列索引识别错位,出现计算结果存到第2列的问题 - 表头字段填写为
tr_pe,和需求的tr_pre不符 - 未做输出重定向,执行结果只会输出到终端,不会写入原文件
第二段代码错误点
- 语法错误,单引号未配对,大括号转义逻辑错误,执行逻辑不符合预期
- 未单独处理表头行,新增列无表头
- 未指定输入字段分隔符,列识别错误导致计算结果不准
- 用
$(NF+1)是在当前最后一列后新增内容,若原文件列数不等于19,新增列不会是第20列
正确实现代码
生成新文件(推荐,避免损坏原文件)
awk 'BEGIN{FS=OFS="\t"} NR==1{$20="tr_pre"} NR>1{$20=$5-$11}1' 原文件名.txt > 处理后文件名.txt
就地修改原文件(需提前备份)
仅支持GNU awk(绝大多数Linux发行版默认预装):
# 先备份原文件 cp 原文件名.txt 原文件名.txt.bak # 执行修改 gawk -i inplace 'BEGIN{FS=OFS="\t"} NR==1{$20="tr_pre"} NR>1{$20=$5-$11}1' 原文件名.txt
内容的提问来源于stack exchange,提问作者AnneG
相关产品推荐
相关产品推荐

