如何为cat与awk的输出结果新增自定义文本或数学序列列
实现方案
方案1:插入自定义字符串列表作为新增列
你可以提前准备好和输出行数一一对应的自定义标签列表,通过两种方式实现拼接:
方式1:直接在awk中定义列表
for f in $(find . -name "E_total_conv.txt" | sort); do tail -1 $f | awk '{print $2}' ; done | awk ' BEGIN { # 按顺序填写你需要的自定义标签,数量和输出行数保持一致 x_tag[1] = "tag1" x_tag[2] = "tag2" x_tag[3] = "tag3" x_tag[4] = "tag4" x_tag[5] = "tag5" x_tag[6] = "tag6" } { print x_tag[NR] "\t" $0 }'
方式2:提前存储标签到文件后用paste拼接
先把自定义标签按每行一个的格式存入x_labels.txt,再执行:
paste x_labels.txt <(for f in $(find . -name "E_total_conv.txt" | sort); do tail -1 $f | awk '{print $2}' ; done)
方案2:插入规则化数学序列作为新增列
方式1:awk内部生成序列
可以灵活设置起始值、步长,适配各种规则序列需求:
示例1:步长0.2的0到1序列(匹配你给出的期望输出)
for f in $(find . -name "E_total_conv.txt" | sort); do tail -1 $f | awk '{print $2}' ; done | awk ' BEGIN { x = 0 # 序列起始值 step = 0.2 # 序列步长 } { printf "%.1f\t%s\n", x, $0 x += step }'
示例2:1到10范围内的偶数序列
for f in $(find . -name "E_total_conv.txt" | sort); do tail -1 $f | awk '{print $2}' ; done | awk ' BEGIN { x = 2 # 第一个符合要求的序列值 step = 2 # 序列步长 } { print x "\t" $0 x += step }'
方式2:用seq生成序列后拼接
# 示例:步长0.2的0到1序列 paste <(seq 0 0.2 1) <(for f in $(find . -name "E_total_conv.txt" | sort); do tail -1 $f | awk '{print $2}' ; done)
注意:给find命令追加
sort是为了保证读取文件的顺序稳定,避免x标签和数值对应错位,你可以根据自己的文件排序规则调整sort参数。
内容的提问来源于stack exchange,提问作者Argento
相关产品推荐
相关产品推荐

