2011-05-16 55 views
2

我正在使用vim製作一個簡單的腳本,試圖將lm_sensors的輸出轉換爲另一個文件。我的問題是需要完成的格式需要結合兩行並將它們輸出到文件中。下面是我目前:將兩行與BASH腳本結合使用

LINE1=(echo -en System: INFO $(date +%x) $(date +%T) : CPU Temperature \{ ; sensors| grep Core\ sed 's/  /, /g'|tr -d '\n') 
LINE2=(echo -e \}) 
echo $LINE1$LINE2 >> (FILE PATH) 

LINE2的唯一目的是把一個}支架在數據的結尾,所以如果有更好的方法,這樣做,所有在同一行,我所有的耳朵。

忽略格式化數據的sed和tr命令,我希望輸出數據看起來如下,儘管我總是收到一個'意外的令牌';''錯誤信息與上面的腳本。

System: INFO (date time) : CPU Temperature { CPU Temp DATA }

我非常感謝所有的輸入。

+1

你爲什麼不直接把撐到字符串?爲什麼這種奇怪的間接通過'LINE2'? – 0xC0000022L 2011-05-16 17:45:18

+0

我試圖把它放在tr命令之後,儘管所有這些都是擺脫了兩者之間的所有數據。這就是爲什麼我必須添加LINE2。如果你可以告訴我最終堅持它的正確方法,所以我不必使用變量,解決了問題。 – Dbonuccelli 2011-05-16 17:49:51

+0

把它與'echo'放在一起?即'回聲「$ LINE1 \}」>>(文件路徑)'或我錯過了什麼? – 0xC0000022L 2011-05-16 17:52:56

回答

1

試試這個,也許:

LINE1=`echo -en System: INFO $(date +%x) $(date +%T) : CPU Temperature \{ ; sensors| grep Core\ sed 's/  /, /g'|tr -d '\n'` 
echo "$LINE1\}" >> (FILE PATH) 

或者:

(echo -en System: INFO $(date +%x) $(date +%T) : CPU Temperature \{ ; sensors| grep Core\ sed 's/  /, /g'|tr -d '\n')|while read line; do 
    echo "$LINE1\}" >> (FILE PATH) 
done 
+0

我用你的第一個選項,一切都是金色的。顯然這是把所有東西搞砸的括號。我非常感謝你的幫助,你是一位救生員。 – Dbonuccelli 2011-05-16 18:15:06

+0

@Dbonuccelli:很高興能幫到你。我會說,你也在錯誤的地方使用了反引號。只是FYI。 – 0xC0000022L 2011-05-16 19:02:20

2

它可以是一個很大整潔:

temp=$(sensors | awk '/Core/ {printf("%s%s", sep, $3); sep = ", "}'; echo "") 
printf "System: INFO %s : CPU Temperature { %s }\n" "$(date "+%x %T")" "$temp" 
+0

呵呵,Bash和Perl的美麗。一個問題和一百種不同的方式來解決它:) ...從我+1。 – 0xC0000022L 2011-05-16 19:56:51