Linux shell按行讀檔案
寫在前面
這裡採用的測試檔案的內容如下:
$ cat read_test.txt
1 a a,b,d,f
2 b alsdjf,apple,kdjf
3 c 163.2.201.1
4 d www.google.com
5 e http://blog.csdn.net/xia7139
另外,這裡的指令碼都會放在test.sh中執行,當然,我不說你也可以看出來^_^
Linux按行讀檔案的方法
Linux中按行讀檔案主要有三種方法,如下:
重定向
while read line do echo $line done < read_test.txt $ sh test.sh 1 a a,b,d,f 2 b alsdjf,apple,kdjf 3 c 163.2.201.1 4 d www.google.com 5 e http://blog.csdn.net/xia7139
管道
cat read_test.txt | while read line do echo $line done $ sh test.sh 1 a a,b,d,f 2 b alsdjf,apple,kdjf 3 c 163.2.201.1 4 d www.google.com 5 e http://blog.csdn.net/xia7139
反引號取命令執行結果
for line in `cat read_test.txt` do echo $line done $ sh test.sh 1 a a,b,d,f 2 b alsdjf,apple,kdjf 3 c 163.2.201.1 4 d www.google.com 5 e http://blog.csdn.net/xia7139
總結:
這裡不難看出,第三種方式中,除了換行符,空格和tab等也會被當成“行”間隔,使用時應該注意。
同時讀入多個變數
Shell中可以將一中空格隔開的多個欄位,同時分別讀入多個變數,非常方便。程式碼如下:
cat read_test.txt | while read number char content do echo "No.:$number char:$char content:$content" done $ sh test.sh No.:1 char:a content:a,b,d,f No.:2 char:b content:alsdjf,apple,kdjf No.:3 char:c content:163.2.201.1 No.:4 char:d content:www.google.com No.:5 char:e content:http://blog.csdn.net/xia7139
也可以採用下面的方式,得到的效果完全相同:
while read number char content
do
echo "No.:$number char:$char content:$content"
done < read_test.txt
實戰:檢視使用者及其所屬組的指令碼
Linux中的使用者資訊和組資訊都是以文字檔案的形式儲存在/etc/passwd
和/etc/group
檔案中,通過讀取這些檔案,可以將使用者和它們的組資訊以更加友好的方式展現出來。下面是程式碼:
#!/bin/bash
#This is a script to list all users in the Unix system.
#Tested through under Bash.
#
#By lfqy.
#Finished on 20141220_1512
#
#Running step:
#chmod a+x user_print.sh
#./user_print.sh
#Print a table head with printf, String Left Aligning with fixed length.
printf "%-7s %-4s %-13s %-15s\n" User UID "PrimaryGroup" "SecondaryGroup"
#Get the user info, user name, uid and gid, from /etc/passwd
awk -F: '$3>=500 {print $1,$3,$4}' /etc/passwd | while read user uid gid
do
#Get the primary group name from /etc/group, using gid.
priGro=`awk -F: '$3=="'$gid'" {print $1}' /etc/group`
secGro=''
#Get all the group not reserved for operating system.
#For every group, test if it is the secondary group of $user.
for gro_mem in `awk -F: 'BEGIN{OFS=":"}$3>="'$gid'" {print $1,$4}' /etc/group`
do
#Get the group member
secMem=":${gro_mem#*:}"
#Get the group name
groName=${gro_mem%%:*}
#Testing, ':' existing for the case lfqy and lfqy0
if [[ $secMem = *",$user"* ]] || [[ $secMem = *":$user"* ]]
then
secGro=$secGro","$groName
#echo "secGro:" $secGro
fi
done
printf "%-7s %-4s %-13s %s\n" $user $uid $priGro ${secGro#*,}
done
$ sh user_print_final.sh
User UID PrimaryGroup SecondaryGroup
lfqy 500 lfqy
執行環境:
CentOS
Release 6.4 (Final)
Kernel Linux 2.6.32-358.el6.x86_64
GNOME 2.28.2
上面的指令碼實際上是我好長時間之前練手寫的,現在看來有些命令的用法,我記得也不是特別清楚了。如有疑問,自行Google。
相關推薦
Linux shell按行讀檔案
寫在前面 這裡採用的測試檔案的內容如下: $ cat read_test.txt 1 a a,b,d,f 2 b alsdjf,apple,kdjf 3 c 163.2.201.1 4 d www.google.com 5 e http://blog.cs
linux shell 逐行讀取檔案行
讀取檔案行 for 命令替換 程式碼塊重定向 while 管道符 程式碼塊重定向 for IFS=$'\n' for line in `ls -l` do (( count++ )) done echo $count 注意: for
shell按行從檔案讀取, 分割成陣列
cut -d 如果找不到分割符號, 就會輸出原字串,無聊-f後面是什麼,加-s就什麼都不輸出了 #!/bin/bash # 從檔案中按行讀取,每行分割成字串, 形成陣列# j=0 while read line do i=1 while : do
Linux Shell 逐行讀取檔案 ( txt , sh , csv等)
今天寫了一個簡單的 Linux Shell 逐行讀取檔案(txt,sh,csv....)的程式,記錄一下,有需要的朋友可以參考。 #!/bin/bash # Only 1 parameter ! if [ $# != 1 ];then echo " Usage
java指定編碼的按行讀寫txt檔案(幾種讀寫方式的比較)
輸入輸出的幾種形式 1.FileReader,FileWriter File r = new File("temp.txt") FileReader f = new FileReader(name);//讀取檔案name BufferedReader b = new Buf
python按行讀寫檔案
方法一:readline函式 #-*- coding: UTF-8 -*- f = open("/pythontab/code.txt") # 返回一個檔案物件 line = f.readline() # 呼叫檔案的 r
go按行讀寫檔案
2019年第一篇部落格 兜兜轉轉又回來更新go的部落格了,今天來講一下如何使用golang進行檔案的讀寫 檔案讀寫需要使用的包 os ioutil bufio strings 檔案讀寫總是少不了判斷檔案是否存在! go裡面使用os.Stat
shell指令碼按行讀取檔案並解析
shell指令碼讀取一個配置檔案,配置檔案的格式如下: name=abc pwd=123456 permission=mop 檔名稱為 config.cfg 要在shell腳本里讀取這個配置檔案,並且把值一一賦給相應的變數,實現如下 while read l
shell指令碼-----按行讀取檔案
[email protected]:5.read-line$ cat file.bin hello world this is 1 this is 2 this is 3[email protected]:5.read-line$ ./read-line.sh file.bin ###
Linux shell sed命令在檔案行首行尾新增字元
昨天寫一個指令碼花了一天的2/3的時間,而且大部分時間都耗在了sed命令上,今天不總結一下都對不起昨天流逝的時間啊~~~ 用sed命令在行首或行尾新增字元的命令有以下幾種: 假設處理的文字為test.file 在每行的頭新增字元,比如"HEAD",命令如下: sed '
Java 按行讀寫檔案
按行讀寫檔案 /* * 按行進行讀寫處理 */ public void readWriteByLine(File input, File output, FileDeal fd) { Bu
Linux shell 命令行下查詢外網IP
shell命令行查ip查詢IP在網頁上打開網址就可以顯示,但是在命令行下可以安裝w3m/Links/Lynx這些命令行瀏覽器,但是為了這個又感覺不方便,所以很多查IP網站提供了UNIX/LINUX的。命令行查詢(詳細): UNIX/Linux: #curl cip.cc Windows: >tel
linux shell 之終端讀寫文件數據流和重定向>,<,<<,>>
運行 文件的 方式 ech 描述符 run 傳遞 實例 pan 終端實現文件中數據流的讀寫; 重定向命令列表如下: 命令說明 command > file 將輸出重定向到 file。將終端數據寫到文件file中 command < file 將輸入重定
while循環按行讀文件的方式總結
log 字節數 toolbar tin als $? 總量 read 內容 分析apache訪問日誌,把日誌每行的訪問字節數對應的字段數字相加,計算訪問總量。#!/bin/bash sum=0 exec < $1 while read line do aa=`
java按行讀寫文件和輸入處理
gin path lines 一個 static apple OS puts oid 一、我們來看python的很簡單: 1、讀文件: 1 with open("/path/file","r") as fr: 2 for line in fr.readlines(
Linux shell計算兩個檔案的交集 並集和差集
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Linux Shell 指令碼讀取配置檔案
一、應用場景 為了靈活應用shell指令碼,適當的加入配置檔案,對於後期的維護和優化會有很大幫助。例如指令碼中使用的檔案/檔案路徑,都可以通過讀取配置檔案完成。 配置檔案 filename=boomlee 指令碼檔案 #!/bin/bash workdir=$(cd $(di
C 按行讀取檔案(但是最後一行會多輸出一行)
#include <stdio.h> int main() { char filename[] = "E:\\data_test\\commands.txt"; //檔名 &nb
python判斷檔案中有否重複行,逐行讀檔案檢測另一檔案中是否存在所讀內容
#!/bin/env python # coding:utf-8 #程式功能是為了完成判斷檔案中是否有重複句子 #並將重複句子打印出來 res_list = [] f = open('./downloadmd5.txt','r') res_dup = [] index = 0 file_d
java按行讀取檔案並對檔案進行加密和解密
package com.alibaba.datax.plugin.reader.selfxmlfilereader.util; import java.io.UnsupportedEncodingException; import java.security