2011-05-16 22 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