如何在bash脚本中获取文件的第一行?
我必须在文件的第一行放入一个bashvariables。 我想这是与grep命令,但它是任何方式来限制行数?
head
从文件中取第一行, -n
参数可以用来指定应该提取多less行:
line=$(head -n 1 filename)
使用bash读取第一行,使用read
语句。 例如
read -r firstline<file
firstline
行将是你的variables(不需要分配给另一个)
line=$(head -1 file)
将工作正常。 (如前面的答案)。 但
line=$(read -r FIRSTLINE < filename)
read
是一个内置的bash命令将稍微快一点。
这就足够了,并将第一行的filename
存储在variables$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
这个问题没有问哪个是最快的,但是为了增加sed的答案,-n'1p'performance不佳,因为模式空间仍然在大文件上被扫描。 出于好奇,我发现“头”胜过sed:
# 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
只需将源文件的第一个列表echo
显到目标文件中。
echo $(head -n 1 source.txt) > target.txt