0

我是新手,正在学习如何获取变量。如何在命令替换中获取打印可变部分?谢谢。

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
4

3 回答 3

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)
于 2014-09-23T11:00:59.703 回答
2

bash将您的变量传递给-v.

此外,您可以awk为您计算文件中的行数 - 它会知道在NR变量的末尾...

awk -v p=$parts 'END{print int(NR/p)}' file
于 2014-09-23T10:09:33.453 回答
1

尝试:

LINES=$(wc -l $filename | awk -v PART=$parts '{print $1/PART}' OFMT="%0.0f")
于 2014-09-23T10:04:20.527 回答