使用awk printf格式化矩阵文件时,如何避免内容合并为单行?
解决矩阵文件格式化小数位数时保留行结构的问题
你的命令出现行合并的原因有两个:一是awk的printf没有输出换行符,二是外层的while read循环完全多余——awk本身就支持逐行处理文件。另外,如果你的矩阵每行包含多个数值,直接格式化$0(整行)会把整行当成单个数值处理,结果不符合预期。
下面是两种针对性的解决方案:
方案1:正确处理每行多数值的矩阵(推荐)
这个方案会遍历每行的每个数值,分别格式化后输出,最后添加换行符保留行结构:
awk '{ for (i = 1; i <= NF; i++) { printf "%.3e ", $i } print "" }' water.txt > water3.txt
方案2:整行作为单个数值处理(仅适用于每行一个数值的情况)
如果你的矩阵每行只有一个数值,只需在printf中添加换行符即可:
awk '{ printf "%.3e \n", $0 }' water.txt > water3.txt
或者用print补换行:
awk '{ printf "%.3e ", $0; print }' water.txt > water3.txt
内容的提问来源于stack exchange,提问作者Svend Bager
相关产品推荐
相关产品推荐

