在awk打印中使用for循环变量

时间:2020-01-02 21:59:21

标签: shell for-loop awk

我正在尝试打印

for i in 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40; do
awk -v a="$i" '{printf "%10.2f %10.2f\n", a, ($8*627.509)}' e1.txt > e2.txt
done

但是当我打开该文件时,

  1.40 -12111939.85
  1.40 -12112479.17
  1.40 -12112817.98
  1.40 -12112997.55
  1.40 -12113047.39
  1.40 -12112998.93
  1.40 -12112873.57
  1.40 -12112695.74
  1.40 -12112504.02
  1.40 -12112346.74
  1.40 -12112316.49
  1.40 -12112204.51
  1.40 -12112149.56

当它读取值并从其他txt文件e1.txt操作时,请忽略第二列。

如图所示,在这种情况下,仅使用最后一个for循环索引变量。但是我希望根据每行分别打印0.80〜1.40的for循环值。

1 个答案:

答案 0 :(得分:3)

为了提高效率,我避免将同一文件处理13次。

BEGIN块看起来很尴尬,因为awk无法声明数组文字。

awk '
  BEGIN {
    a = "0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40"
    n = split(a, as)
  }
  {
    for (i=1; i <= n; i++)
      printf "%10.2f %10.2f\n", as[i], ($8 * 627.509)
  }
' e1.txt > e2.txt

如果您想先使用所有0.80,最后要使用所有1.40,则可以:

awk '...' e1.txt | sort -g > e2.txt