Как добавить столбец чисел в файл данных массива

Как добавить столбец чисел в файл данных массива

У меня есть файл данных с двумя столбцами чисел:

входной файл

4.182   4.1843
4.184   4.2648
4.2281  4.0819
4.2204  4.1676
4.0482  4.1683
4.0156  4.2895
4.4504  5.2369
4.3776  4.4979
4.3797  4.1372
4.1411  4.0528

Мне нужно вставить один столбец чисел, равномерно распределенных во входной файл данных. Например, в выходных данных был вставлен столбец чисел, распределенных на 5. , поэтому числа будут 1 , 6, 11, 16 и т. д.

выход

1   4.182   4.1843
6   4.184   4.2648
11  4.2281  4.0819
16  4.2204  4.1676
21  4.0482  4.1683
26  4.0156  4.2895
31  4.4504  5.2369
36  4.3776  4.4979
41  4.3797  4.1372
46  4.1411  4.0528

решение1

  1. Создайте индексный столбец в исходном файле данных, используя pr -t -n.
  2. Создайте индексные данные, которые будут вставлены в качестве нового столбца, при этом каждая строка индексных данных будет проиндексирована по номеру строки.Для этого я использовал небольшую функцию bash, как показано ниже.
  3. Присоединяйся киндексный столбецсданныес использованием join.

Вот скрипт bash для демонстрации:

#!/usr/bin/env bash
# insert-counts.sh

cols='/tmp/cols'
cat <<'EOF' | pr -t -n >$cols
4.184   4.2648
4.2281  4.0819
4.2204  4.1676
4.0482  4.1683
4.0156  4.2895
4.4504  5.2369
4.3776  4.4979
4.3797  4.1372
4.1411  4.0528
EOF

# gen_index START NUM INC
gen_index() {
  local start="$1" num="$2" inc="$3"
  local x
  for ((x = 0; x < num; x++)); do
    printf "%2d  %4d\n" $(( x + 1 )) $(( start + (x * inc) ))
  done
}

lines=`wc -l <$cols`

gen_index 1 $lines 5 |
join -o 1.2 -o 2.2 -o 2.3 - $cols |
awk '{printf("%4d  %8.4f  %8.4f\n",$1,$2,$3);}'

И вот что получилось:

$ ./insert_counts.sh
   1    4.1840    4.2648
   6    4.2281    4.0819
  11    4.2204    4.1676
  16    4.0482    4.1683
  21    4.0156    4.2895
  26    4.4504    5.2369
  31    4.3776    4.4979
  36    4.3797    4.1372
  41    4.1411    4.0528

решение2

Если я правильно понимаю генерацию вашего индекса, то

awk '{print 5*(NR-1)+1" "$0}' yourfile > oufile

должно сделать это. Если вы хотите более красивый вывод, вы можете использовать printfвместо этого, например

$ awk '{printf "%-3d %s\n", 5*(NR-1)+1, $0}' yourfile
1   4.184   4.2648
6   4.2281  4.0819
11  4.2204  4.1676
16  4.0482  4.1683
21  4.0156  4.2895
26  4.4504  5.2369
31  4.3776  4.4979
36  4.3797  4.1372
41  4.1411  4.0528

Связанный контент