如何在bash中将TXT文件格式化为结构化CSV文件



我想在Linux服务器(OpenSuse Leap 15.2(上获得一些关于CPU温度的信息。所以我写了一个脚本,每20秒收集一次数据,并将其写入一个文本文件。现在我已经删除了我不需要的所有垃圾数据(如"CPU温度"等(。

现在我有一个这样的文件:

47
1400
75
3800

前两行分别是以C为单位的CPU温度和以RPM为单位的风扇速度的一个读数。接下来的两行是相同测量值的另一个读数。

最后我想要这个结构:

47,1400
75,3800

我的问题是:Bash脚本能为我做到这一点吗?我尝试了sed和Awk,但没有什么对我来说完美的。此外,我想要一个CSV文件来制作图形,但我认为将文本文件转换为CSV文件不是问题。

您可以使用paste

paste -d, - - < file.txt

pr

pr -ta2s, file.txt

使用ed

ed -s file.txt <<-'EOF'
g/./s/$/,/
;.+1j
,p
Q
EOF

您可以使用awk:

awk 'NR%2{printf "%s,",$0;next;}1' file.txt > file.csv

另一个awk:

$ awk -v OFS=, '{printf "%s%s",$0,(NR%2?OFS:ORS)}' file

输出:

47,1400
75,3800

解释:

$ awk -v OFS=, '{        # set output field delimiter to a comma
printf "%s%s",       # using printf to control newline in output
$0,              # output line
(NR%2?OFS:ORS)   # and either a comma or a newline
}' file

由于您询问bash脚本是否可以做到这一点,这里有一个纯bash的解决方案;o]

c=0
while read -r line; do
if (( c++ % 2 )); then
echo "$line"
else printf "%s," "$line"
fi
done < file

看看"粘贴"。这将把多行文本连接成一行,应该可以满足您的需求。

echo "${DATA}"
Name
SANISGA01CI
5WWR031
P59CSADB01
CPDEV02
echo "${DATA}"|paste -sd ',' -
Name,SANISGA01CI,5WWR031,P59CSADB01,CPDEV02

相关内容

  • 没有找到相关文章

最新更新