2014-09-23 2 views
0

나는 이것에 대해 새로운 것으로, 변수를 얻는 방법을 배우고있다. 명령 대체에서 인쇄 변수 부분을 어떻게 얻을 수 있습니까? 감사.awk에서 명령 대체 내 변수 전달

echo "Enter number of parts:" 
read parts 
echo "Enter filename:" 
read filename 

LINES=$(wc -l $filename | awk '{print $1/$parts}' OFMT="%0.0f") 

echo $LINES 

답변

3

문제는 두 가지이다. 첫째, bash는 작은 따옴표로 변수를 확장하지 않으므로 $partsawk으로 문자 그대로 전달됩니다. 대신 큰 따옴표를 사용해야합니다. 그러나 그것은 다른 문제를 야기합니다. 강타는 awk 호출하기 전에 변수를 확대 :

LINES=$(wc -l $filename | awk '{print \$1/$parts}' OFMT="%0.0f") 

또는 변수를 전달 :

LINES=$(wc -l $filename | awk "{print $1/$parts}" OFMT="%0.0f") 
             -- ------ 
             | |-> $parts as defined in 
             |   your script 
             |------> $1, the first positional 
               parameter of your bash script. 

그래서, 파일의 실제 첫 번째 필드를 사용하려면, 당신은 $1을 탈출해야합니다 명시 적으로 awake하려면 :

LINES=$(wc -l $filename | awk '{print $1/parts}' OFMT="%0.0f" parts=$parts) 
+1

감사합니다. 나는 더 많이 배웠다. –

1

시도 :

LINES=$(wc -l $filename | awk -v PART=$parts '{print $1/PART}' OFMT="%0.0f") 
2

-v과에 bash 변수를 전달합니다.

또한, awk 당신을위한 파일의 라인을 계산하도록 할 수 있습니다 - 그것은 NR 변수의 끝에 것을 알 수 ...

awk -v p=$parts 'END{print int(NR/p)}' file