我是新手,正在学习如何获取变量。如何在命令替换中获取打印可变部分?谢谢。
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
我是新手,正在学习如何获取变量。如何在命令替换中获取打印可变部分?谢谢。
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
问题是双重的。首先,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)
bash
将您的变量传递给-v
.
此外,您可以awk
为您计算文件中的行数 - 它会知道在NR
变量的末尾...
awk -v p=$parts 'END{print int(NR/p)}' file
尝试:
LINES=$(wc -l $filename | awk -v PART=$parts '{print $1/PART}' OFMT="%0.0f")