微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

现在我有一个这样的文件

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。