2つの数値列を含むデータファイルがあります。
入力ファイル
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