gpt4 book ai didi

awk - 为什么awk的OFS只作用于第一行?

转载 作者:行者123 更新时间:2023-12-02 07:03:07 24 4
gpt4 key购买 nike

我正在使用 awk 对文件进行一些简单的计算,但无法正确设置输出格式。 OFS 出于某种原因仅应用于第一行(即仅在 BEGIN block 内),对于其他行,在字段之间插入一个空格。

输入:

title   c1  c2  c3  n
AA 14 6 3 40
BB 8 2 2 38

单线:

cat file.txt | awk -F'\t' 'BEGIN {OFS="\t"; print "Title","Freq1","Freq2","Freq3","Total"}; NR>1{printf "%s %.3f %.3f %.3f %d\n", $1, $2/$5, $3/$5, $4/$5, $5;}' > file2.txt

我已经尝试从 BEGIN 中删除 header ,但这并没有什么不同,BEGIN{FS="\t";OFS="\t";...} .我在 cygwin 中使用 awk。

最佳答案

由于您使用的是 printf,因此您主动完全避免了 OFS。如果你想合并 OFS,它会变得丑陋:

NR>1 {printf "%s%s%.3f%s%.3f%s%.3f%s%d\n", $1, OFS, $2/$5, OFS, $3/$5, OFS, $4/$5, OFS, $5}

或者,不要使用 printf:

NR>1 {print $1, sprintf("%.3f",$2/$5), sprintf("%.3f",$3/$5), sprintf("%.3f",$4/$5), $5}

关于awk - 为什么awk的OFS只作用于第一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17062462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com