文章目录

Shell强大灵活,但是今天在使用Shell处理按行读取文件时发现 读取到的行设定的tab分割符不见了

先看一下演示的待处理文件:

需要做的需求就是将里面的数据使用shell将第一列读取出来做一些其他处理(当然如果仅仅是完成读取首列这个功能,使用awk是最快的,这里只是演示)

1
2
3
4
5
6
7
8
#! /bin/bash

cat score.log | while read line #按行读取文件
do

grade=`echo $line | awk -F "\t" '{print $1}'` #读取首列(年级)
echo $grade
done

执行这个文件并且使用管道| vim - 打印只之后可以发现格式不对,按行打印了,并且其原先的分隔符tab也消失了

后来查到据说shell的默认分隔符是空格的原因,所以一种最直接的方式就是去.bashrc里面修改分割符,但是这么做可能会影响其他的shell程序
所以比较保险的一种方法就是先将行中的tab替换,再对替换后的数据进行操作

1
2
3
4
5
6
7
#! /bin/bash

cat score.log | awk 'gsub("\t","\001",$0)' | while read line #按行读取文件
do
grade=`echo $line | awk -F "\001" '{print $1}'` #读取首列(年级)
echo $grade
done

先做了独立的tab去掉之后就可以很顺利地看到需要的结果了

这个方法虽然比较简单,但是非常实用~

文章目录