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迴圈從檔案中逐行讀取內容:在預設情況現下此方法是逐
Python從txt檔案中逐行讀取資料
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
Linux中的Shell指令碼逐行讀取檔案的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 }