배열 데이터 파일에 숫자 열을 추가하는 방법

배열 데이터 파일에 숫자 열을 추가하는 방법

두 개의 숫자 열이 포함된 데이터 파일이 있습니다.

입력 파일

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

관련 정보