配列データファイルに数値列を追加する方法

配列データファイルに数値列を追加する方法

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

  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

関連情報