while read line 的字符串截取
阿新 • • 發佈:2018-02-02
for 都在 inf 變量 sha 字符 如果 pre 來看 有的時候,循環文本如下
root@pts/1 # cat file |head -10 2961047 788934832 797699249 2018-01-30-10 2961054 801973977 797725431 2018-01-30-10 2961057 799438954 797701082 2018-01-30-10 2961064 802146497 797701082 2018-01-30-10 2961067 802146292 797351447 2018-01-30-10 2961074 802140219 801973274 2018-01-30-10 2961077 802132731 801134893 2018-01-30-10 2961082 802129091 797771835 2018-01-30-10 2961083 799350247 797487029 2018-01-30-10 2961097 800865188 797487029 2018-01-30-10
看似都在一行,使用for循環處理是就會出問題,我們來看下
root@pts/1 # for i in `cat file`;do echo $i ;done|head -10
2961047
788934832
797699249
2018-01-30-10
2961054
801973977
797725431
2018-01-30-10
2961057
799438954
每一行的信息分割後都到了下一行,如果去截取字符串,就會出問題,我們可以使用while read line 的方式處理
使用while read line 讀取文件時,line的變量賦予如下
#!/bin/bash cd /share/perdir/chaichuan/tmp while read line do info=($line) ### 需要將讀到的 line 賦予變量,然後做字符串截取如 ${info[3]} 代表這行的第4個字符串 echo ${info[0]} ${info[1]} ${info[2]} ${info[3]} done < file root@pts/1 # bash temp.sh|head -10 2961047 788934832 797699249 2018-01-30-10 2961054 801973977 797725431 2018-01-30-10 2961057 799438954 797701082 2018-01-30-10 2961064 802146497 797701082 2018-01-30-10 2961067 802146292 797351447 2018-01-30-10 2961074 802140219 801973274 2018-01-30-10 2961077 802132731 801134893 2018-01-30-10 2961082 802129091 797771835 2018-01-30-10 2961083 799350247 797487029 2018-01-30-10 2961097 800865188 797487029 2018-01-30-10
可以直接使用 ${line[2]} 來截取需要的字符串
while read line 的字符串截取