입력 파일의 특정 열에 수식을 적용하고 다른 모든 열을 있는 그대로 전달하는 더 나은 방법

입력 파일의 특정 열에 수식을 적용하고 다른 모든 열을 있는 그대로 전달하는 더 나은 방법

텍스트 테이블에 주어진 데이터를 입력하기 위해 간단한 수식을 적용해야 하는 경우가 많습니다.

처음에는 각 사용 사례에 대해 특정한 작은 함수를 작성했습니다. 그런 다음 "일반 코드"를 bash 함수로 리팩토링했습니다. 이것은 잘 작동하지만 이상적이지는 않습니다.

내 "이전 솔루션"은 다음과 같습니다. 모든 필드를 반복하고 확인/반응합니다.

calcc(){
  awkcmd='{for (i=1;i<=NF;i++){if (i==col) printf "%s ",'
  awkcmd+="$2"
  awkcmd+='; else printf "%s ", $i ;}; print "";}'
  awk -v col=$1 "$awkcmd" | column -t
}

인위적인 사용 예:

"-output의 groupName(Column4)을 ls -ldayNumber(Column7) 제곱으로 바꿉니다."

$ ls -l | calcc 4 '$7*$7'

더 좋은 방법이나 지금까지 살펴보지 않은 (POSIX) 도구가 있습니까?

$1..$n편집: @RalphRönnquist는 쓰기가 가능하므로 더 짧은 버전이 제안될 수 있다고 지적했습니다 . 이는 print기본 awk동작이므로 더 단축할 수 있습니다. ==>

$ calcc() { awk "\$$1=$2" | column -t; }
$ calcc-nc() { awk "\$999=$1" | column -t; }

두 번째 함수는N마지막에 계산 결과를 나열하십시오.

답변1

awk이 작업은 훌륭하지만 다음을 사용하면 더 간단하게 수행할 수 있습니다.

calcc() {
    awk "{\$$1=$2;print}" | column -t
}

이것이 더 나은지 여부는 귀하의 선택입니다.

관련 정보