8

我有以下 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<&-

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

4

4 回答 4

16

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

head -3 rhyme.txt | 
while read a; do
  echo $a; 
done
于 2012-11-08T16:27:19.063 回答
7

它读取第一行

while read file <&6 ;

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

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

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

$ head -3 押韵.txt

反而。

更新

如果您想read单独使用,请省略while循环并执行以下操作:

exec 6< rhyme.txt

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

echo $line1 
echo $line2 
echo $line3 

exec 6<&-

或使用循环:

exec 6< rhyme.txt

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

exec 6<&-
于 2012-11-08T16:05:20.123 回答
6

read循环中 有一个while,它吃掉了第一行。

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

于 2012-11-08T16:05:17.383 回答
2

我得到了类似的任务,以获取样本 10 条记录并用于cathead目的。以下是帮助我的一个班轮cat FILE.csv| head -11 在这里,我使用了“11”以便将标题与数据一起包含在内。

于 2014-10-15T10:02:15.233 回答