2014-09-23 2 views
0

Я новичок в этом и учась, как получить переменную. Как получить части переменных для печати прямо внутри подстановки команд? Благодарю.Переменная pass в 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 не будет расширять переменные в одинарных кавычках, поэтому $parts передается буквально до awk. Вместо этого вы должны использовать двойные кавычки. Это, однако, порождает другую проблему. Bash расширяет переменные перед тем вызова awk:

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:

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

Или передать переменную в awk явно:

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

Спасибо. я узнал больше. –

1

Try:

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

Пройди свой bash переменную с -v.

Кроме того, вы можете позволить awk считать строки в файле для вас - он будет знать, что в конце концов в переменной NR ...

awk -v p=$parts 'END{print int(NR/p)}' file 
Смежные вопросы