[英]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.