Как отформатировать файл TXT в структурированный файл CSV в bash?

Я хотел получить некоторую информацию о температуре процессора на моем Linux Server (OpenSuse Leap 15.2). Поэтому я написал сценарий, который собирает данные каждые 20 секунд и записывает их в текстовый файл. Теперь я удалил все ненужные данные (например, «CPU Temp» и т. Д.).

Теперь у меня есть такой файл:

      47
1400
75
3800

Первые две строки представляют собой одно показание температуры процессора в градусах Цельсия и скорости вращения вентилятора в об / мин соответственно. Следующие две строки - это еще одно показание тех же измерений.

В конце концов, мне нужна такая структура:

      47,1400
75,3800

Мой вопрос: может ли сценарий Bash сделать это за меня? Я пробовал что-то с sedи Awk, но у меня ничего не работало идеально. Кроме того, я хочу, чтобы из файла CSV был график, но я думаю, что преобразовать текстовый файл в файл CSV - не проблема.

5 ответов

Решение

Ты можешь использовать awk:

      awk 'NR%2{printf "%s,",$0;next;}1' file.txt > file.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 -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. ;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
Другие вопросы по тегам