[英]How to get the first line of a file in a bash script?
我必须在文件的第一行放入一个bash变量。 我想这是用grep命令,但它是否有任何限制行数的方法?
head
需要从文件中第一线,以及-n
参数可用于指定多少线应该提取:
line=$(head -n 1 filename)
使用bash读取第一行,使用read
语句。 例如
read -r firstline<file
firstline
将是你的变量(不需要分配给另一个)
这足以将第一行filename
存储在变量$line
:
read -r line < filename
我也喜欢awk
:
awk 'NR==1 {print; exit}' file
要存储行本身,请使用var=$(command)
语法。 在这种情况下, line=$(awk 'NR==1 {print; exit}' file)
。
甚至是sed
:
sed -n '1p' file
使用等效的line=$(sed -n '1p' file)
。
当我们用seq 10
提供read
时,查看样本,即1到10的数字序列:
$ read -r line < <(seq 10)
$ echo "$line"
1
$ line=$(awk 'NR==1 {print; exit}' <(seq 10))
$ echo "$line"
1
line=$(head -1 file)
会工作得很好。 (如前所述)。 但
line=$(read -r FIRSTLINE < filename)
因为read
是内置的bash命令,所以会略快一些。
只需将源文件的第一个列表echo
显到目标文件中即可。
echo $(head -n 1 source.txt) > target.txt
问题并没有问哪个是最快的,但是为了添加到sed答案,-n'1p'表现不佳,因为模式空间仍在大文件上扫描。 出于好奇,我发现“头部”以微弱优势赢得了胜利:
# best:
head -n1 $bigfile >/dev/null
# a bit slower than head (I saw about 10% difference):
sed '1q' $bigfile >/dev/null
# VERY slow:
sed -n '1p' $bigfile >/dev/null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.