#bash #csv #awk
#bash #csv #awk
Вопрос:
в настоящее время я запускаю различные тесты и записываю необходимые результаты в файл csv. однако это отлично работало, когда нужно было проверить один результат, прямо сейчас я получаю много результатов, и я хотел бы записать их в файл csv, но иметь 4 столбца, а затем перейти к следующему файлу
#!/bin/bash
LOOPS="$1"
FILE="test.csv"
for ((COUNTER=1; COUNTER <= LOOPS; COUNTER ))
do
echo "RUN $COUNTER"
cryptsetup benchmark 2>amp;1 | grep "aes" | awk '{print $5}' >> $FILE
done
исходный вывод выглядит следующим образом
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 557.1 MiB/s 1832.1 MiB/s
serpent-cbc 128b 65.0 MiB/s 75.1 MiB/s
twofish-cbc 128b 122.0 MiB/s 155.0 MiB/s
aes-cbc 256b 412.9 MiB/s 1422.5 MiB/s
и было бы намного проще, если бы выходные данные были разделены на четыре столбца, а не все в одном
вывод должен выглядеть следующим образом
1832.1 75.1 155.0 1422.5
1832.1 75.1 155.0 1422.5
Комментарии:
1. я думаю, он уже в четырех столбцах. Вы хотели убрать пробел между числом и MiB / s?
2. о, извините, код исправлен, он должен выглядеть в 5-м столбце, выводится только один столбец
3. в качестве примера, в результатах отображается больше, только повторяется, поэтому ясно, как я хочу, чтобы это выглядело
4. вам нужен только пятый столбец в одной строке?
5. я хочу, чтобы первые 4 записи в 5-м столбце были первой строкой. затем следующие 4 записи должны быть во второй строке … и так далее
Ответ №1:
Awk должен работать.
Начинается со второй строки для удаления заголовков. Удаляет начальные пробелы и устанавливает разделитель полей на 3 пробела, затем печатает каждое поле, разделенное запятыми 🙂
awk -F " " 'NR>1{gsub(/^[ t] |[ t] $/,""); print $1","$2","$3","$4}' test
Ответ №2:
Следующая команда выведет 5-й столбец каждой строки в одной строке, разделенной запятой.
awk '(NR>1){printf ",";} {printf "%s",$5} END {print ""}'
Комментарии:
1.
awk 'NR>1{printf ",%s",$5} END {print ""}' test
2. @Jidder, вывод вашего комментария будет начинаться с «,».
3. Ваш начинается с запятой, просто вы напечатали строку из первой строки перед ней
4. Я ожидал
cryptsetup benchmark 2>amp;1 | grep "aes" | awk ...