2014-03-28 77 views
0

我創建一個腳本,從整個文件夾中的所有文件中讀取指定的值的問題bash腳本從整個文件夾的文件中讀取specifc值

我有很多的電子郵件目錄中的文件,我需要從每個文件中提取2個特定值。

之後,我必須把它們放入一個新的文件,它看起來像這樣:

-------------- 
To: value1 

value2 
-------------- 

這就是我想做的事,但我不知道如何創建腳本:

# I am putting the name of the files into a temp file 
`ls -l | awk '{print $9 }' >tmpfile` 

# use for the name of a file 
`date=`date +"%T" 

# The first specific value from file (phone number) 
var1=`cat tmpfile | grep "To: 0" | awk '{print $2 }' | cut -b -10 ` 

# The second specific value from file(subject) 
var2=cat file | grep Subject | awk '{print $2$3$4$5$6$7$8$9$10 }' 

# Put the first value in a new file on the first row 
echo "To: 4"$var1"" > sms-$date 

# Put the second value in the same file on the second row 
echo ""$var2"" >>sms-$date 

....... 

,並在目錄

我嘗試使用,而每個文件和功能做同樣的,但我無法完成的腳本

謝謝

+0

有可能超過一個錯誤,但首先是'tmpfile'包含文件名列表,當你做'貓TMPFILE | grep「To:0」'''''''''''''''''''''''''''你可以按照你的設想搜索文件名, –

+0

根本不需要tmpfile,只要執行'grep -h「到:0」*'。 –

+1

另一個:'var2 = cat file | grep主題| awk'{print $ 2 $ 3 $ 4 $ 5 $ 6 $ 7 $ 8 $ 9 $ 10}''反引號不存在。另外我不明白'file'文件裏面有什麼? –

回答

0

我做了一些修改腳本,希望他們將是對你有用:

#!/bin/bash 

for file in *; do 
    var1=$(awk '/To: 0/ {print substr($2,0,10)}' "$file") 
    var2=$(awk '/Subject/ {for (i=2; i<=10; ++i) s=s$i; print s}' "$file")  
    outfile="sms-"$(date +"%T") 
    i=0 
    while [ -f "$outfile" ]; do outfile="sms-$date-"$((i++)); done 
    echo "To: 4$var1" > "$outfile" 
    echo "$var2" >> "$outfile" 
done 
  • for循環只是經過,你運行該文件夾中的每個文件腳本來自。
  • 我添加了一個額外的後綴$i到文件名的末尾。如果不存在具有相同日期的文件,則該文件將被創建而沒有後綴。否則,$i的值將持續增加,直到沒有具有相同名稱的文件。
  • 我使用的是$()而不是反引號,這只是個人偏好,但在我看來可以更清楚,尤其是當有其他引用時。
  • 通常沒有必要將grep的輸出流水至awk。您可以使用/ /語法在awk中執行搜索。
  • 我已刪除了cut -b -10substr($2, 0, 10),打印從第2列
  • 前10個字符這不是更短的更換,但我用了一個循環,而不是$2$3...,我認爲它看起來有點整潔。
  • 在兩條輸出線中不需要所有額外的"
0

我sugest嘗試以下操作:

#!/bin/sh 

RESULT_FILE=sms-`date +"%T"` 
DIR=. 

fgrep -l 'To: 0' "$DIR" | while read FILE; do 
    var1=`fgrep 'To: 0' "$FILE" | awk '{print $2 }' | cut -b -10` 
    var2=`fgrep 'Subject' "$FILE" | awk '{print $2$3$4$5$6$7$8$9$10 }'` 

    echo "To: 4$var1" >>"$RESULT_FIL" 
    echo "$var2" >>"$RESULT_FIL" 
done 
+0

它不起作用......它什麼都不做......它停止 –

+0

@ user3472214哎呀,我很抱歉。現在修復它。默認情況下,它會在當前目錄中進行搜索,但可以通過更改「DIR」變量來指定另一個目錄。 –