shell逐行读取文本的几种方法

  2017-05-22  Linux运维编程技术   3 分钟

经常会对文体文件进行逐行处理,在Shell里面如何获取每行数据,然后处理该行数据,最后读取下一行数据,循环处理.有多种解决方法如下:

通过read命令完成.

read命令接收标准输入,或其他文件描述符的输入,得到输入后,read命令将数据放入一个标准变量中.

利用read读取文件时,每次调用read命令都会读取文件中的"一行"文本.

当文件没有可读的行时,read命令将以非零状态退出.

复制代码

cat data.dat | while read line
do
   echo "File:${line}"
done

while read line
do 
    echo "File:${line}"
done < data.dat

2.使用awk命令完成

awk是一种优良的文本处理工具,提供了极其强大的功能.

利用awk读取文件中的每行数据,并且可以对每行数据做一些处理,还可以单独处理每行数据里的每列数据.

cat data.dat | awk '{print $0}'
cat data.dat | awk 'for(i=2;i<NF;i++) {printf $i} printf "\n"}'

第1行代码输出data.dat里的每行数据,第2代码输出每行中从第2列之后的数据.

如果是单纯的数据或文本文件的按行读取和显示的话,使用awk命令比较方便.

3.使用for var in file 命令完成

for var in file 表示变量var在file中循环取值.取值的分隔符由$IFS确定.

for line in $(cat data.dat)
do 
    echo "File:${line}"
done

for line in `cat data.dat`
do 
    echo "File:${line}"
done

如果输入文本每行中没有空格,则line在输入文本中按换行符分隔符循环取值.

如果输入文本中包括空格或制表符,则不是换行读取,line在输入文本中按空格分隔符或制表符或换行符特环取值.

可以通过把IFS设置为换行符来达到逐行读取的功能.

IFS的默认值为:空白(包括:空格,制表符,换行符).

字符串split

获取到每行的文本字符串,也许还会用到字符串的切分,可以使用以下方法:

tmp_str="a,b,c"
table=(${tmp_str//,/ })
table_name=${table[1]}
cube_name=${table[0]}
echo $table_name $cube_name

— 转载本站文章请注明作者和出处全栈记 ,请勿用于任何商业用途

— 于 2017年05月22日 ,共写了 981 字;

— 本文共有 4 个标签:, , ,

一条回应:“shell逐行读取文本的几种方法”

  1. shirley说道:

    哈哈哈,看了好多站长都是写程序的

发表评论

电子邮件地址不会被公开。 必填项已用*标注