我想读取一个文件并通过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 `
任何帮助??
答案 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)
以下简单脚本将有所帮助
file=$1
cat $file | while read line
do
echo $line
done
将文件读入数组,
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