如何用awk将多列数据文件乘以常数并保留小数,维持原行列结构
解决awk处理多列数据后保持行列结构的问题
你的问题出在没有添加列分隔符和行结束换行,导致所有输出挤在同一列。以下是修正后的awk命令,能保留原文件的行列结构,同时完成数据转换:
awk '{printf "%d", $1; for (i=2; i<=NF; i++) printf " %.4f", $i*1000; print ""}' combined.txt > combined1.txt
命令说明:
- 保留第一列结构:用
printf "%d", $1输出原第一列的整数(如果第一列需要参与计算,可改为printf "%.0f", $1*1或调整格式) - 处理后续列:循环遍历第2到最后一列(
i=2; i<=NF),每列计算$i*1000后,用" %.4f"格式输出(4位小数+前置空格分隔,匹配你的预期输出格式) - 换行保持行结构:每行处理完后用
print ""输出换行符,确保每行结果对应原文件的一行
自定义调整:
- 若需修改小数位数:将
%.4f改为%.3f(3位)或其他位数即可 - 若需更换分隔符:把
" %.4f"中的空格换成"\t"(制表符)或其他符号 - 若第一列也需乘常数:比如第一列也要乘1000,可改为
printf "%.4f", $1*1000
用你的示例数据测试,输出会完全匹配预期的行列格式。
内容的提问来源于stack exchange,提问作者ash
相关产品推荐
相关产品推荐

