一次shell中seq的處理

來源:互聯網
上載者:User

標籤:

一次shell中seq的處理
 

 

背景:用要shell 提取 檔案中內容,檔案名稱是用序號如下產生,檔案差不多有將近400多w個  如下:
  www.ahlinux.com  

 

原始指令碼
#! /bin/sh
#str1=""

#filecount=`ls -l /root/gjj | wc -l | awk ‘{print $1}‘`
#echo $filecount

for n in `seq  $1 $2`
do
filename="/windows_gjj/"${n}".txt"
echo $filename

dos2unix $filename
sed -i ‘1,76d‘ $filename
sed -i ‘41,$d‘ $filename
sed -i ‘s/<.*">//g‘ $filename
sed -i ‘s/<.*>//g‘ $filename
sed -i ‘s/^[[:space:]]*//g‘ $filename
sed -i ‘/^$/d‘ $filename
#sed -i ‘s/;//g‘ $filename

#cat $filename >> /tmp/all_gjj.log

flag=`grep "&nbsp" $filename | wc -l | awk ‘{print $1}‘`

if [ $flag -ne 10 ]; then
 cat $filename >> /tmp/all_gjj.log
 echo "********************************************************************************************" >> /tmp/all_gjj.log
 LCOUNT=`wc -l $filename | awk ‘{print $1}‘`
 str1=""
 for i in `seq 1 10`
 do
 sed -i ‘1d‘ $filename
 str=`head -n 1 $filename`
 echo $str >> /tmp.log
 str1=${str1}${str}"|"
 echo $str1
 sed -i ‘1d‘ $filename
 done

 echo $str1 >> /root/gjj.txt
fi

done

指令碼中$1,$2 代表起始的序號。
一開始的時候,用這個指令碼來提取檔案內容是正常的,但當檔案名稱上7位元的時候,就出現問題了:

如下:
[[email protected] ~]# sh tiqu.sh 2908637 2908640
/windows_gjj/2.90864e+06.txt
dos2unix: converting file /windows_gjj/2.90864e+06.txt to UNIX format ...
dos2unix: problems converting file /windows_gjj/2.90864e+06.txt
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
grep: /windows_gjj/2.90864e+06.txt: 沒有那個檔案或目錄
cat: /windows_gjj/2.90864e+06.txt: 沒有那個檔案或目錄
wc: /windows_gjj/2.90864e+06.txt: 沒有那個檔案或目錄
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
head: 無法開啟 “/windows_gjj/2.90864e+06.txt” 讀取資料: 沒有那個檔案或目錄
|
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
head: 無法開啟 “/windows_gjj/2.90864e+06.txt” 讀取資料: 沒有那個檔案或目錄
||
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
sed:無法讀取 /windows_gjj/2.90864e+06.txt:沒有那個檔案或目錄
head: 無法開啟 “/windows_gjj/2.90864e+06.txt” 讀取資料: 沒有那個檔案或目錄

分析:出現這種問題主要是 shell 把7位元字用指數的形式在表示了,從而造成了找不到對應的檔案

解決方案:為了能使 7位元仍然以數位形式出現,試了 seq 中的-f ,-w 之類的選項都沒達到預期的效果,最後採用了折中的方法,最高位用字元代替,後6為用seq 產生,用參數-w 保持位元的寬度一致,修該的指令碼如下:
#! /bin/sh
#str1=""

#filecount=`ls -l /root/gjj | wc -l | awk ‘{print $1}‘`
#echo $filecount

for n in `seq -w $1 $2`
do
n="2"${n}
filename="/windows_gjj/"${n}".txt"
echo $filename

dos2unix $filename
sed -i ‘1,76d‘ $filename
sed -i ‘41,$d‘ $filename
sed -i ‘s/<.*">//g‘ $filename
sed -i ‘s/<.*>//g‘ $filename
sed -i ‘s/^[[:space:]]*//g‘ $filename
sed -i ‘/^$/d‘ $filename
#sed -i ‘s/;//g‘ $filename

#cat $filename >> /tmp/all_gjj.log

flag=`grep "&nbsp" $filename | wc -l | awk ‘{print $1}‘`

if [ $flag -ne 10 ]; then
 cat $filename >> /tmp/all_gjj.log
 echo "********************************************************************************************" >> /tmp/all_gjj.log
 LCOUNT=`wc -l $filename | awk ‘{print $1}‘`
 str1=""
 for i in `seq 1 10`
 do
 sed -i ‘1d‘ $filename
 str=`head -n 1 $filename`
 echo $str >> /tmp.log
 str1=${str1}${str}"|"
 echo $str1
 sed -i ‘1d‘ $filename
 done

 echo $str1 >> /root/gjj.txt
fi

done

[[email protected] ~]# sh tiqu.sh 908636 908640
/windows_gjj/2908636.txt
dos2unix: converting file /windows_gjj/2908636.txt to UNIX format …
|
/windows_gjj/2908637.txt
dos2unix: converting file /windows_gjj/2908637.txt to UNIX format ...

達到預期的目標了!

 

 

 

 

    • 本文來自:Linux學習網

一次shell中seq的處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.