我正在尝试将文件中的行数放入整数变量中。
这就是我正在做的事情
typeset -i x
x=`wc -l $1`
其中$ 1是命令行arg
问题是wc -l给出了一个数字和文件名,如:5 blah
有没有办法只将数字放入x?
答案 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删除文件名。这样做的好处是无法以cat
,cut
,sed
或awk
开始第二个流程:
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}