1. 程式人生 > >Shell指令碼方法--從檔案中逐行讀取內容

Shell指令碼方法--從檔案中逐行讀取內容

從檔案逐行讀取資料的方法有兩種,一種是在while迴圈或until迴圈中使用read命令,通過檔案描述符一行一行的讀取檔案內容;另一種是在for迴圈中使用cat <filename>來讀取檔案的內容。

1.使用for迴圈從檔案中逐行讀取內容:在預設情況現下此方法是逐個單詞的讀取檔案內容,因為使用這種方法讀取檔案時,他使用環境變數IFS的值作為分隔符,由於IFS的預設值是“<space/空格>”“<tab/製表符>”“<newline/新行>”,所以他首先以空格作為分隔符來讀取檔案內容,因此如果使用for迴圈逐行讀取內容,在for迴圈開始之前需要先修改變數IFS的值,等for迴圈結束後再將IFS的值改回來。

示例1:

#!/bin/bash
bak=$IFS                                         #定義一個變數bak儲存IFS的值
if [ $# -ne 1 ];then                          #判斷位置引數是否為1
   echo "Usage $0 filename"
   exit
fi
if [ ! -f $1 ];then                              #判斷位置引數是否為檔案
   echo "the $1 is not a file"
   exit
fi 
IFS=$'\n'                                        #將環境變數IFS的值修改為換行符
for i in `cat $1`                                #逐行讀取檔案內容並列印到螢幕
do
   echo $i
done

IFS=$bak                                       #將環境變數IFS的值改回原值


示例2:如果不修改變數IFS的值,系統預設按照IFS的原值,按空格來讀取檔案

#!/bin/bash
if [ $# -ne 1 ];then
   echo "Usage $0 filename"
   exit
fi
if [ ! -f $1 ];then
   echo "the $1 is not a file"
   exit
fi
for i in `cat $1`
do
   echo $i
done

2.在指令碼中定義程式碼塊,使用重定向逐行讀取檔案內容:

示例:

#!/bin/bash
if [ $# -ne 1 ];then                          #判斷指令碼引數是否為1
  echo "Usage:$0 filename"
  exit 1
fi
file=$1                                            #將指令碼引數引數賦值給變數file
{                                                       #定義程式碼塊,大括號{}中的程式碼即為程式碼塊
  read line1 
  read line2
} <$file                                             #使用$file將程式碼塊的標準輸入指向檔案$file
echo "first line in $file is $line1"      #輸出檔案內容
echo "second line in $file is $line2"

exit 2


3.使用while迴圈結合read命令逐行讀取檔案內容:

#!/bin/bash
if [ $# -ne 1 ];then
  echo "Usage:$0 filename"
  exit 1
fi
file=$1
if [ ! -f $file ];then
  echo "the $file is not a file"
  exit 2
fi
count=0
while read line      #使用read命令迴圈讀取檔案內容,並將讀取的檔案內容賦值給變數line
do
   let count++
   echo "$count $line"
done <$file           #“done <$file”將整個while迴圈的標準輸入指向檔案$file
echo -e "\ntotle $count lines read"

exit 0




相關推薦

Shell指令碼方法--檔案讀取內容

從檔案逐行讀取資料的方法有兩種,一種是在while迴圈或until迴圈中使用read命令,通過檔案描述符一行一行的讀取檔案內容;另一種是在for迴圈中使用cat <filename>來讀取檔案的內容。1.使用for迴圈從檔案中逐行讀取內容:在預設情況現下此方法是逐

Pythontxt檔案讀取資料

Python從txt檔案中逐行讀取資料   # -*-coding:utf-8-*- import os for line in open("./samples/label_val.txt"): print('line=', line, end = '') #後面

c++ 文字讀取,並按空格對讀取的一行進行分割

ifstream tf("tf.obj", std::ios::in);//開啟檔案 char s[50] = {0}; string v = ""; string x = ""; string y =

shell指令碼抽取文字檔案指定字串的方法:sed+grep方法、awk+grep方法(必要時可以聯合sed以及grep)、grep+cut方法

在linux中經常要對一些動態的文字檔案抽取指定的字串,比如執行ps命令後想要獲取指定的執行程序(如ps自己)的PID號(同一個程序每次啟動的時候pid號是隨機分配的)。該怎麼辦呢?當然,可以用一些擷取字串的方法,這裡介紹一下用2種方法來解決這類問題。 一、sed+grep方法: 首先大概瞭

使用shell指令碼統計原始碼檔案的註釋數.(// , /**/)

今天看到一求助帖子再問這個事,所以無聊寫了個。 用的是awk指令碼 , 也就是指令碼直譯器是用/usr/bin/awk , 而不是/bin/sh 但都是指令碼 , 如果你想的話, 可以用shell指令碼呼叫我這個awk指令碼就行了。 使用方法:將下面的指令碼儲存成檔案如ge

shell指令碼限制日誌檔案大小和

背景: 專案server在後端持續執行,日誌檔案不斷變大,需及時進行清空。 解決方案:編輯sh指令碼,指定時間間隔輪詢;將超出限制的日誌檔案,先備份,再清空原日誌檔案內容。 清空日誌檔案內容的方法有:             1

shell指令碼修改配置檔案引數

shell指令碼修改配置檔案中引數指令碼:change_ejabberd.sh內容如下:注意:cut的用法:cut命令主要是接受三個定位方法:第一,位元組(bytes),用選項-b第二,字元(characters),用選項-c第三,域(fields),用選項-f

shell指令碼獲取配置檔案內容

1、獲取配置檔案中的內容。 步驟是1,2,3. 2.刪除一個檔案中的內容,然後追加自己需要的內容,這裡的先將檔案中的內容刪除,然後新增1234進去。  3.在某行的前一行或後一行新增內容 具休操作如下: #匹配行前加 sed -i '/allow 361

linux C 修改文字檔案指定內容

1、可隨意修改內容 /* * Author:aniu12<[email protected]> * Date: 2014.02.13 */ #include<stdio.h> #include<stdlib.h> #in

LinuxShell指令碼讀取檔案的4種方法

1.釜底抽薪法 while迴圈中執行效率最高,最常用的方法 function while_read_LINE_bottm(){ While read LINE do echo $LINE done 

Shell_Linux bash shell 讀取檔案的三種方法

方法一,指定換行符讀取: #! /bin/bash     IFS="  "     for LINE in `cat /etc/passwd`  do            echo $LINE d

shell程式之讀取檔案的引數且使用此引數每次執行5分鐘

/*********************************************************************  * Author  : Samson  * Date    : 04/18/2014  * Test platform:  *  

檔案讀取內容,並去掉換符'\n'的一種簡單方法

開啟檔案後,可以用readlines將每一行的內容讀取到一個“列表”中, 獲取列表中每個元素,利用字串的strip('\n')去掉換行符 例如: lines = fd.readlines() for line in lines: line=line.strip('

python 檔案讀取資料,同時去除掉空格和換

從檔案中讀取資料,同時去除掉空格和換行,程式碼如下 import numpy as np def sort(path): w = open(path,'r') l = w.readlines() col=[] for k in l: k = k.strip('\n')

shell 檔案讀取批量檔名並做命令列操作

222檔案內容: /home/zhangsuosheng/Desktop/9-30/9_30/1bak/1538291162.png /home/zhangsuosheng/Desktop/9-30/9_30/1bak/1538291212.png /home/zhangsuosheng/Deskto

按空格和按換檔案提取資料

1,讀取檔案的類為ifstream,其中“i”代表“in”,針對變數而言,ifstream所在的標頭檔案為fstream; 2,ifstream中有open方法,可以開啟檔案; 3,ifstream中有>>方法,可以以空格為分割符,以換行為結束符讀取資料; 4,iostrea

檔案新增號的不同方法

在檔案中新增行號的不同方法 你可以直接使用IDE提供的顯示行號的功能來完成這一任務,當然你也可以使用其它方式完成此項任務。 情景如下: 工作中需要給以下程式碼新增行號: #include <stdio.h> int main(int argc, char *

VS程式設計,提示【以下檔案尾不一致。是否將尾標準化?】的一種解決方法

原因分析: 可能是寫程式碼的時候行尾的標識可能不一樣造成的。預設情況下是坐對行尾進行檢查。   解決辦法有兩種: 去掉去行尾的檢查,或者修改行尾的內容為統一的一種。   方法1:去掉行尾檢查的配置: 在選項裡->環境->文件中有一個"載入時

shell指令碼載入資料檔案到hive表

如果執行時間允許,還可以增加判斷hive表是否存在的。 #!/bin/ksh #------------------------------------------------------------------------------------- #-

shell 讀取檔案

read_file_1(){ while read line do   echo $line done < $filename }   read_file_2(){ for i in `cat $filename` do   echo $i done }