![입력 파일의 특정 열에 수식을 적용하고 다른 모든 열을 있는 그대로 전달하는 더 나은 방법](https://linux55.com/image/89421/%EC%9E%85%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%8A%B9%EC%A0%95%20%EC%97%B4%EC%97%90%20%EC%88%98%EC%8B%9D%EC%9D%84%20%EC%A0%81%EC%9A%A9%ED%95%98%EA%B3%A0%20%EB%8B%A4%EB%A5%B8%20%EB%AA%A8%EB%93%A0%20%EC%97%B4%EC%9D%84%20%EC%9E%88%EB%8A%94%20%EA%B7%B8%EB%8C%80%EB%A1%9C%20%EC%A0%84%EB%8B%AC%ED%95%98%EB%8A%94%20%EB%8D%94%20%EB%82%98%EC%9D%80%20%EB%B0%A9%EB%B2%95.png)
텍스트 테이블에 주어진 데이터를 입력하기 위해 간단한 수식을 적용해야 하는 경우가 많습니다.
처음에는 각 사용 사례에 대해 특정한 작은 함수를 작성했습니다. 그런 다음 "일반 코드"를 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 -l
dayNumber(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
}
이것이 더 나은지 여부는 귀하의 선택입니다.