awk Print 문에서 변수 대체 -v

awk Print 문에서 변수 대체 -v

나는 이 일을 하는 데 한 시간 이상을 소비했습니다. 이렇게 어려울 수가 없습니다... 한 파일의 데이터 열을 다른 파일로 인쇄하고 싶습니다. 인쇄하려는 열은 전달된 내용과 스크립트 이전에 발생한 내용에 따라 다르지만 COL이라고 합니다. 정보를 추출해야 하는 파일은 $1.db입니다. $1은 전달된 첫 번째 매개변수입니다(존재 여부를 확인합니다). 내가 현재 가지고 있는 것:

awk -v colvar="$COL" '{ print $colvar }' "$1.db"  >> tmp2.tmp

이로 인해 열뿐만 아니라 $1.db의 전체 내용이 tmp2.tmp로 인쇄됩니다.

sh -xv 하면 알 수 있어요

awk -v colvar="$COL" '{ print $colvar }' "$1.db"  >> tmp2.tmp
+ awk -v colvar=3 '{ print $colvar }' cop4342.db

따라서 awk var가 COL 값으로 설정되어 있지만 print 문에서는 대체되지 않는 것을 볼 수 있습니다. 나는 이것이 작은 따옴표 때문이라고 생각하지만 무엇을 해야할지 모르겠습니다. 어떤 도움이라도 감사하겠습니다 :)

답변1

하나의 데이터 열만 추출하려면 다음을 사용할 수 있습니다.cut. 예를 들어, 파일에 다음이 example.dat포함되어 있는 경우

a b c d e
1 2 3 4 5

그런 다음 cut -d ' ' -f 3 example.dat주어진

c
3

여기서 필드 구분 기호는 공백이므로 세 번째 열을 선택합니다.

편집하다:이 bash 스크립트는 awk를 호출하여 동등한 출력을 생성합니다.

#!/bin/bash
var1=$1

awk '{print $colvar}' colvar=$1 example.dat

관련 정보