Странный вывод при суммировании столбцов с помощью awk - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть два файла, a1.txt и a2.txt.

a1.txt

1 0.2

a2.txt

2 0.8

И я использую следующий код для суммирования второго столбца двух файлов и вывода результата в sum.txt

awk '{a[FNR]=$1; b[FNR]+=$2;} END{for (i=1; i<=FNR; i++) printf "%12.6f %12.5f \n", a[i], b[i]}' a[1-10].txt > sum.txt

Однако, это возвращает результат:

2.000000      0.00000

Первый столбец работает как ожидалось , но результат второго столбца отличается от ожидаемого 1.00000.

Правильный результат получается, если я использую [1-2] .txt> sum.txt

Что вызывает эту проблему и как это решить?

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Проблема в том, что оболочка расширяется a[1-10].txt до a1.txt и a0.txt (если оба существуют). Если вы находитесь в bash, вы можете вместо этого go для a{1..10}.txt.

Что касается вашей программы awk, ваш блок END не должен быть таким, как есть. Это будет работать, потому что, по совпадению, FNR всегда равно 1. Предпочитайте это:

awk '{a=$1; b+=$2} END{printf "%12.6f %12.5f \n", a, b}' a{1..10}.txt

Как видите, массивы вообще не нужны.

1 голос
/ 24 апреля 2020

Не могли бы вы попробовать следующее. Вы должны суммировать значения в главном блоке, а НЕ в блоке END.

awk '
FNR==NR{
  sum[FNR]=$2
  next
}
{
  print $1,sum[FNR]+$2
}
' a1.txt a2.txt

Также для вашего ответа в вашем коде есть опечатка в имени массива

Чтобы добавить 2-е поле всех файлов, используйте:

awk '
{
  first=$1
  sum+=$2
}
END{
  print first,sum
}
' a{1..10}.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...