2013-01-04 3 views
0

사용자 입력에서 AWK에 변수를 전달하려고 awk가합니다 : 옵션이 나열되는 경우에도 :전달 bash는 입력 변수는

오류는 '잘못된 -v 옵션 AWK를'진술로 AWK의 -v의 변화를 시도 남자 파일.

#! /bin/bash 
read -p "Enter ClassID:" CLASS 
read -p "Enter FacultyName:" FACULTY 


awk '/FacultyName/ {print}' data-new.csv > $FACULTY.csv 
awk -vclass=${CLASS} '/class/ {print}' data-new.csv >> $FACULTY.csv 


echo Class is $CLASS 
echo Faculty member is $FACULTY 
+0

공간을 제거해보십시오 : 이제

awk -v class="${CLASS}" '$0 ~ class {print}' data-new.csv >> $FACULTY.csv 

, 당신은 대신이 사용하는 어떤 이유가 '#!/bin/bash' –

+0

이것을 확인하십시오 : http://theunixshell.blogspot.com/2013/01/passing-bash-variable-to-awk.html – Vijay

+0

[awk를 변수와 함께 사용] 가능한 복제본 (http : // stackoverflow .com/questions/6373379/using-awk-with-variables) –

답변

7

일부 버전은 -v과 변수 할당 사이에 공간이 필요합니다. 또한 bash 변수를 큰 따옴표로 묶어 awk에 전달되기 전에 쉘에서 원하지 않는 구문 분석 (예 : 단어 분리, 와일드 카드 확장)을 방지해야합니다. 마지막으로 awk에서 /.../은 상수 정규 표현식입니다 (예 : /class/은 변수 "class"의 값이 아니라 "class"라는 문자열을 검색합니다). 수정이 모든으로, 여기 당신이 원하는 것을 할 생각 awk 명령입니다 :

grep "$CLASS" data-new.csv >> $FACULTY.csv 
+0

고든 고마워. 나는 awk와 bash 프로그래밍에 익숙하지 않다. 학습 곡선이 약간 가파르다. 그러나 이것은 내 지식을 움직이는 데 도움이된다. grep 명령에 대한 경험이 있지만, 가장 좋은 방법을 알지 못하는 초보자들도 있습니다. 적어도 awk에 관해 배우고 싶었습니다. 답장을 보내 주신 모든 분들께 감사드립니다. – user1947569

0

스크립트는 나에게 명확하지 않다, 그러나 이러한 모든 작업 : AWK의

CLASS=ec123 
echo | awk -vclass=$CLASS '{print class}' 
echo | awk -vclass=${CLASS} '{print class}'