我是新手,正在学习如何获取变量。如何在命令替换中获得打印变量部分?感谢。
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
答案 0 :(得分:3)
问题是双重的。首先,bash不会在单引号中扩展变量,因此$parts
按字面意思传递给awk
。你应该使用双引号。然而,这带来了另一个问题。在调用awk
之前,Bash正在扩展变量:
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 :(得分:2)
将bash
变量传递给-v
。
另外,您可以让awk
为您计算文件中的行数 - 它会在NR
变量的末尾知道......
awk -v p=$parts 'END{print int(NR/p)}' file
答案 2 :(得分:1)
尝试:
LINES=$(wc -l $filename | awk -v PART=$parts '{print $1/PART}' OFMT="%0.0f")