在shell脚本中读取文件

时间:2014-01-13 15:02:39

标签: shell

我想读取一个文件并通过shell脚本在屏幕上打印,所以我找到了一个简单的代码来执行此操作:

#! /bin/bash 

FILENAME=$1
Lines=$(wc -l < $FILENAME)

count=0

while [ $count -lt $Lines ]
do
    let count++
    LINE= `head -n $count $FILENAME | tail -1 `
    echo "$count $LINE"
done
echo -e "\nTotal $count lines read"

,但我不明白以下几行:

LINE= `head -n $count $FILENAME | tail -1 `

任何帮助??

4 个答案:

答案 0 :(得分:1)

这将首先在文件上运行head,获取文件的第一行$count行。然后将其传送到尾部(|)到尾部,(由于-1)将仅返回头部输出的最后一行(即第count行)。

然后将其分配给LINE变量进行处理

值得注意的是,这种方法可行,但效率非常低。

答案 1 :(得分:1)

该行

LINE= `head -n $count $FILENAME | tail -1 `

不符合你的想法。它尝试执行

输出生成的命令
head -n $count $FILENAME | tail -1

传递给它的变量LINE(没有值)。

相反说:

LINE=$(head -n $count $FILENAME | tail -1)

基本上会在文件中提供行号count


作为替代方案,您可以说:

LINE=$(sed -n ${count}'p' $FILENAME) 

得到这条线。


您的脚本似乎在模仿

cat -n filename

答案 2 :(得分:1)

其他人指出的效率非常低。 @ devnull的观察cat -n file就是现场。

要在bash中模仿,我会写:

declare -i linenum=0
while IFS= read -r line; do
    printf "%8d  %s\n" $((linenum++)) "$line"
done < file

答案 3 :(得分:0)

以下简单脚本将有所帮助

readfile.sh

file=$1

cat $file | while read line
do
    echo $line
done

将文件读入数组,

readfileAsArray.sh

file=$1

let index=1

while IFS=$'\n' read -r -a myArray
do
    file_content_array[$index]="${myArray[0]}"
    echo ${file_content_array[$index]}
    let index=$index+1
done < $file