두 개의 숫자 열이 포함된 데이터 파일이 있습니다.
입력 파일
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