文件中行数的变量

时间:2012-02-27 00:41:30

标签: bash unix

我正在尝试将文件中的行数放入整数变量中。

这就是我正在做的事情

typeset -i x
x=`wc -l $1`

其中$ 1是命令行arg

问题是wc -l给出了一个数字和文件名,如:5 blah

有没有办法只将数字放入x?

7 个答案:

答案 0 :(得分:9)

x=$(wc -l < "$1")

这可以避免无用地使用cat和任何分叉,并且可以在包含空格甚至换行符的路径上工作。

答案 1 :(得分:8)

您可以改为cat $1 | wc -l

wc -l $1 | cut -d " " -f 1

答案 2 :(得分:1)

wc -l $1 | awk '{print $1}'

使用awk

答案 3 :(得分:1)

sed ...

wc -l $1 | sed 's/^ *\([0-9]*\).*$/\1/'

或者,假设第一个空格是数字之后的那个:

wc -l $1 | sed 's/ .*$//'

答案 4 :(得分:1)

您可以使用shell删除文件名。这样做的好处是无法以catcutsedawk开始第二个流程:

var=$(wc -l _your_file_)
nb_lines=${var%% *}

您还可以使用nb_lines=${var%% *} bash`特定重写nb_lines=${var/ */}, but the 2nd form is less portable being

<强>更新

我在上面读到一些wc的输出以空格开头,因此可以重写上面的内容:

#var=$(wc -l _your_file_)
var="   3    file"
var=$(echo $var)
nb_lines=${var%% *}

使用echo摆脱多余的空间。

答案 5 :(得分:0)

如果您尝试将行号放在我推荐的文件中。

在Windows中:

awk '{print NR " " $s}' filename > ouputfile

在Linux中:

cat -n file > outputfile

我隔离了它们,因为在Windows中无法运行cat -n因此必须使用awk。

答案 6 :(得分:0)

filename=’test.txt'
line_no=$(cat ${filename} | wc -l)
echo ${line_no}