亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Linux Shell > 正文

Shell逐行讀取文件的4種方法

2020-07-27 19:10:01
字體:
來源:轉載
供稿:網友

在Linux中有很多方法逐行讀取一個文件的方法,其中最常用的就是下面的腳本里的方法,而且是效率最高,使用最多的方法。為了給大家一個直觀的感受,我們將通過生成一個大的文件的方式來檢驗各種方法的執行效率。

方法1:while循環中執行效率最高,最常用的方法。

復制代碼 代碼如下:

function while_read_LINE_bottm(){
While read LINE
do
echo $LINE
done  < $FILENAME
}

注釋:我習慣把這種方式叫做read釜底抽薪,因為這種方式在結束的時候需要執行文件,就好像是執行完的時候再把文件讀進去一樣。

方法2 : 重定向法;管道法: cat $FILENAME | while read LINE

復制代碼 代碼如下:

Function While_read_LINE(){
cat $FILENAME | while read LINE
do
echo $LINE
done
}

注釋:我只所有把這種方式叫做管道法,相比大家應該可以看出來了吧。當遇見管道的時候管道左邊的命令的輸出會作為管道右邊命令的輸入然后被輸入出來。

方法3: 文件描述符法


復制代碼 代碼如下:

Function while_read_line_fd(){
Exec 3<&0
Exec 0<$FILENAME
While read LINE
Do
Echo $LINE
Exec 0<&<3
}

注釋: 這種方法分2步驟,第一,通過將所有內容重定向到文件描述符3來關閉文件描述符0.為此我們用了語法Exec 3<&0 。第二部將輸入文件放送到文件描述符0,即標準輸入。

方法4    for  循環。


復制代碼 代碼如下:

function  for_in_file(){
For  i  in  `cat $FILENAME`
do
echo $i
done
}

注釋:這種方式是通過for循環的方式來讀取文件的內容相比大家很熟悉了,這里不多說。對各個方法進行測試,看那方法的執行效率最高。

首先我們用腳本(腳本見附件)生成一個70000行的文件,文件位置在/scripts/bigfile。然后通過下面的腳本來測試各個方法的執行效率,腳本很簡單,不再解釋。

復制代碼 代碼如下:

#!/bin/bash
FILENAME="$1"
TIMEFILE="/tmp/loopfile.out" > $TIMEFILE
SCRIPT=$(basename $0)
function usage(){
echo -e "/nUSAGE: $SCRIPT file /n"
exit 1
}
function while_read_bottm(){
while read LINE
do
echo $LINE
done < $FILENAME
}
function while_read_line(){
cat $FILENAME | while read LINE
do
echo $LINE
done
}
function while_read_line_fd(){
exec 3<&0
exec 0< $FILENAME
while read LINE
do
echo $LINE
done
exec 0<&3
}
function for_in_file(){
for i in  `cat $FILENAME`
do
echo $i
done
}
if [ $# -lt 1 ] ; then
usage
fi
echo -e " /n starting file processing of each method/n"
echo -e "method 1:"
echo -e "function while_read_bottm"
time while_read_bottm >> $TIMEFILE
echo -e "/n"
echo -e "method 2:"
echo -e "function while_read_line "
time while_read_line >> $TIMEFILE
echo -e "/n"
echo -e "method 3:"
echo "function while_read_line_fd"
time while_read_line_fd >>$TIMEFILE
echo -e "/n"
echo -e "method 4:"
echo -e "function  for_in_file"
time  for_in_file >> $TIMEFILE

執行腳本后: [root@localhost shell]# ./while /scripts/bigfile
腳本輸出內容:

復制代碼 代碼如下:

method 1:
function while_read_bottm
real    0m5.689s
user    0m3.399s
sys    0m1.588s
method 2:
function while_read_line
real    0m11.612s
user    0m4.031s
sys    0m4.956s
method 3:
function while_read_line_fd
real    0m5.853s
user    0m3.536s
sys    0m1.469s
method 4:
function  for_in_file
real    0m5.153s
user    0m3.335s
sys    0m1.593s

下面我們對各個方法按照速度進行排序。
復制代碼 代碼如下:

real    0m5.153s    method 4 (for 循環法)
real    0m5.689s    method 1  (while 釜底抽薪法)
real    0m5.853s    method 3    (標識符法)
real    0m11.612s  method 2    (管道法)

由此可見在各個方法中,for語句效率最高,而在while循環中讀寫文件時,
復制代碼 代碼如下:

while read LINE
do
echo $LINE
done < $FILENAME

方式執行效率最高。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97视频在线观看免费高清完整版在线观看| 国产成人综合久久| 午夜精品一区二区三区在线播放| 精品亚洲国产成av人片传媒| 中文字幕亚洲欧美一区二区三区| 欧美成人激情图片网| 狠狠躁夜夜躁人人爽天天天天97| 亚洲天堂网站在线观看视频| 在线亚洲欧美视频| 45www国产精品网站| 国产精品久久久久影院日本| 97精品在线视频| 亚洲激情视频网| 2018国产精品视频| 久久夜色精品国产欧美乱| 米奇精品一区二区三区在线观看| 成人网在线免费观看| 欧美精品激情在线观看| 久久久成人精品| 国产精品永久免费| 日韩欧美国产激情| 中文字幕欧美日韩| 欧美午夜无遮挡| 欧美日韩一区二区在线| 亚洲美女av在线| 亚洲男人天堂2023| 青青久久av北条麻妃黑人| 亚洲黄色片网站| 岛国精品视频在线播放| 欧美激情视频三区| 一区二区三区四区精品| 在线精品播放av| 日本一区二区在线播放| 久久久精品久久久| 最近中文字幕mv在线一区二区三区四区| 久久99精品国产99久久6尤物| 国产精品扒开腿做爽爽爽男男| 深夜成人在线观看| 久久视频中文字幕| 国产精品美女主播在线观看纯欲| 国产亚洲欧美另类中文| 日韩乱码在线视频| 国产91精品最新在线播放| 日韩美女在线播放| 精品国产一区二区三区久久狼5月| 日韩国产高清视频在线| 精品久久中文字幕久久av| 777777777亚洲妇女| 久久艳片www.17c.com| 国产精品美女999| 欲色天天网综合久久| 亚洲第一国产精品| 精品国产一区二区在线| 国产69精品99久久久久久宅男| 91po在线观看91精品国产性色| 日韩av色在线| 久久久久久美女| 亚洲男人的天堂网站| 51精品在线观看| 欧美—级a级欧美特级ar全黄| 国产亚洲精品高潮| 亚洲一区中文字幕在线观看| 欧美激情二区三区| 日韩欧美中文字幕在线播放| 亚洲欧美国产va在线影院| 久久69精品久久久久久久电影好| 日韩精品极品视频| 亚洲伊人成综合成人网| 久热精品视频在线免费观看| 国产成人在线亚洲欧美| 国产一区二区久久精品| 亚洲一区二区精品| 日韩在线观看精品| 国产美女久久久| 亚洲已满18点击进入在线看片| 国产精品白嫩初高中害羞小美女| 日韩一区二区精品视频| 国产成人午夜视频网址| 亚洲香蕉在线观看| 国产精品一区二区久久久久| 欧美极品在线播放| 97精品视频在线| 国产视频久久久| 欧美日韩国产综合新一区| 97香蕉超级碰碰久久免费的优势| 狠狠色狠狠色综合日日五| 伊人久久综合97精品| 91网站免费观看| 91视频国产精品| 成人国产精品色哟哟| 亚洲 日韩 国产第一| 欧美激情久久久久久| 国产美女精品免费电影| 亚洲xxx视频| 国产日韩在线一区| 欧美成人免费播放| 高潮白浆女日韩av免费看| 久久91亚洲精品中文字幕奶水| 黄网站色欧美视频| 中文字幕一区日韩电影| 欧美日韩中文字幕在线视频| 日韩一区二区三区在线播放| 国产成人精彩在线视频九色| 久久精品国产精品亚洲| 国产成人精品亚洲精品| 成人精品久久一区二区三区| 亚洲天堂第一页| 中文字幕精品www乱入免费视频| 久久精品视频亚洲| 亚洲成人精品在线| 九九久久久久久久久激情| 91系列在线观看| 国产精品第一视频| 成人乱色短篇合集| 国产欧美韩国高清| 亚洲久久久久久久久久久| 日韩一区二区在线视频| 色先锋久久影院av| 日韩视频在线免费观看| 欧美激情欧美激情在线五月| 国产精品一区=区| 欧美精品制服第一页| 亚洲伊人久久大香线蕉av| 国产欧美日韩中文字幕| 久久国产精品亚洲| 亚洲黄色片网站| 一区二区中文字幕| 中日韩美女免费视频网址在线观看| 中文字幕亚洲激情| 国产精品免费一区豆花| 国产成人一区二区在线| 亚洲欧美激情视频| 亚洲免费伊人电影在线观看av| 亚洲国产免费av| 亚洲第一网中文字幕| 日韩av在线一区二区| 国产精品∨欧美精品v日韩精品| 亚洲天堂日韩电影| 精品综合久久久久久97| 国产成人福利视频| 亚洲成人av片在线观看| 国产成人精品亚洲精品| 欧美精品videos性欧美| 久久久久久这里只有精品| 日韩av成人在线观看| 亚洲人精选亚洲人成在线| 亚洲人成电影网站色www| 狠狠躁18三区二区一区| 欧美最近摘花xxxx摘花| 红桃av永久久久| 欧美国产日韩一区| 亚洲综合成人婷婷小说| 亚洲国产一区二区三区四区| 日韩国产欧美精品一区二区三区| 亚洲的天堂在线中文字幕| 亚洲精品不卡在线| 亚洲视频专区在线| 668精品在线视频| 亚洲国产精久久久久久| 精品成人乱色一区二区| 57pao国产成人免费| 欧美第一黄色网| 国内精品久久久久久中文字幕| 国内精品小视频|