在bash中读取文件的前三行

fro*_*odo 6 linux bash shell

我有以下shell脚本来读取文件的前三行并将它们打印到屏幕 - 它无法正常工作,因为它打印出2,3,4行而不是行1,2,3 - 我在做什么错了?

exec 6< rhyme.txt

while read file <&6 ;
do
        read line1 <&6
        read line2 <&6
        read line3 <&6

        echo $line1 
        echo $line2 
        echo $line3 
done

exec 6<&-
Run Code Online (Sandbox Code Playgroud)

感谢您的回答 - 我知道head命令但是想要使用读取和文件描述符来显示前三行

Ben*_*ela 11

您还可以组合head和while命令:

head -3 rhyme.txt | 
while read a; do
  echo $a; 
done
Run Code Online (Sandbox Code Playgroud)


unw*_*ind 7

有一个readwhile循环,吃的第一行.

您可以使用更简单的方法head -3来执行此操作.


Ola*_*che 6

它读取第一行

while read file <&6 ;
Run Code Online (Sandbox Code Playgroud)

它读取第2行,第3行和第4行

read line1 <&6
read line2 <&6
read line3 <&6
Run Code Online (Sandbox Code Playgroud)

如果你想阅读前三行,请考虑

$ head -3 rhyme.txt

代替.

更新:

如果你想read单独使用,那么就省略while循环并做到:

exec 6< rhyme.txt

read line1 <&6
read line2 <&6
read line3 <&6

echo $line1 
echo $line2 
echo $line3 

exec 6<&-
Run Code Online (Sandbox Code Playgroud)

或者循环:

exec 6< rhyme.txt

for f in `seq 3`; do
    read line <&6
    echo $line 
done

exec 6<&-
Run Code Online (Sandbox Code Playgroud)