如何在bash脚本中获取文件的第一行?

时间:2010-03-13 18:56:14

标签: bash

我必须在文件的第一行放入一个bash变量。我想这是用grep命令,但是它可以用来限制行数吗?

6 个答案:

答案 0 :(得分:334)

head从文件中获取第一行,-n参数可用于指定应提取的行数:

line=$(head -n 1 filename)

答案 1 :(得分:47)

使用bash读取第一行,使用read语句。例如

read -r firstline<file

firstline将是您的变量(无需分配给其他人)

答案 2 :(得分:10)

line=$(head -1 file)

工作正常。 (如前所述)。但

line=$(read -r FIRSTLINE < filename)

将略微加快,因为read是内置bash命令。

答案 3 :(得分:10)

这足以将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)

当我们向read提供seq 10时,请查看示例,即1到10之间的数字序列:

$ read -r line < <(seq 10) 
$ echo "$line"
1

$ line=$(awk 'NR==1 {print; exit}' <(seq 10))
$ echo "$line"
1

答案 4 :(得分:4)

问题并不是要问哪个是最快的,而是添加到sed答案中,-n&#39; 1p&#39;由于仍然在大文件上扫描模式空间,因此性能很差。出于好奇,我发现&#39; head&#39;胜过sed:

// This is just your JSON string above.
var text = '{ "date_price": [ { "date": "Jan 2000", "price": 1394.46 }, { "date": "Feb 2000", "price": 1366.42 }, { "date": "Mar 2000", "price": 1498.58 }, { "date": "Apr 2000", "price": 1452.43 } ] }';

// Parse it as an object.
var obj = JSON.parse(text);

// Get the date_price property, which is an array already.
var result = obj.date_price;

// Some output here, to illustrate...
console.log(result);
for (var i = 0; i < result.length; i++) {
    console.log(result[i]);
}

答案 5 :(得分:3)

echo源文件的第一个列表放入目标文件中。

echo $(head -n 1 source.txt) > target.txt