如何在Terminal中为制表符分隔TXT文件添加固定值第三列?
在Terminal中给制表符分隔的TXT文件添加固定第三列的便捷方法
嘿,这个需求在Terminal里有好几种超便捷的实现方式,我给你列几个最常用的,挑顺手的用就行:
- 用awk命令(最推荐,语法直观)
awk是处理文本的神器,对付这种固定列追加的需求简直得心应手。假设你的源文件名叫input.txt,直接运行下面的命令就能生成带第三列的新文件:
awk '{print $1 "\t" $2 "\tEcoRI"}' input.txt > output.txt
简单解释下:$1和$2分别对应每行的第一、第二列,\t用来保持原文件的制表符分隔格式,最后拼接上固定内容EcoRI,结果会输出到output.txt里。要是你想直接修改原文件(记得提前备份,谨慎操作!),可以用GNU awk的原地编辑参数:
awk -i inplace '{print $1 "\t" $2 "\tEcoRI"}' input.txt
- 用sed命令
sed擅长文本替换,这里我们可以直接在每行末尾追加内容:
sed 's/$/\tEcoRI/' input.txt > output.txt
$表示匹配每行的末尾,s/$/\tEcoRI/就是在每行最后插入制表符和EcoRI。如果要直接修改原文件,加-i参数就行:
Linux系统:
sed -i 's/$/\tEcoRI/' input.txtmacOS系统:
sed -i '' 's/$/\tEcoRI/' input.txt(注意空引号,是macOS sed的特殊要求)用paste命令(适合灵活扩展场景)
这个方法思路是先生成一个和原文件行数一致、每行都是EcoRI的临时列文件,再和原文件合并:
# 生成和原文件行数相同的EcoRI列 yes EcoRI | head -n $(wc -l < input.txt) > temp_col.txt # 用制表符合并原文件和临时列 paste input.txt temp_col.txt > output.txt # 清理临时文件 rm temp_col.txt
虽然步骤多一点,但如果之后需要添加的列内容有变化,这个方法的扩展性会更好。
内容的提问来源于stack exchange,提问作者Mgdesaix
相关产品推荐
相关产品推荐

