У меня есть файл данных с двумя столбцами чисел:
входной файл
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
- Создайте индексный столбец в исходном файле данных, используя
pr -t -n
. - Создайте индексные данные, которые будут вставлены в качестве нового столбца, при этом каждая строка индексных данных будет проиндексирована по номеру строки.Для этого я использовал небольшую функцию bash, как показано ниже.
- Присоединяйся киндексный столбецсданныес использованием
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