Как разделить одну колонку на несколько в CSV-файле

Могут быть некоторые недостающие зависимости, но вы всегда можете попробовать запустить его, введя: ./ Popcorn-time в каталоге, в который вы его распаковали.

При этом запускается, выдаются ли сообщения об ошибках или что-то подобное?

0
05.07.2018, 23:52
2 ответа

Способ sed

Если вы хотите заменить запятые -пробелы(,␣)табуляциями в вашем файле, вы можете передать его содержимое через sed. Вот пример

$ echo '/apps/XxReceipt.java, Thu 28 Jun 2018 02:49:45 AM EDT' | sed 's:, :\t:g'
/apps/XxReceipt.java    Thu 28 Jun 2018 02:49:45 AM EDT

Пояснение:

  • Простые кавычки вокруг s:, :\t:gсообщают оболочке передать строку как есть в качестве единственного аргумента для sed.
  • Для sed sв первой позиции означает замену
  • :— разделитель шаблона/замены
  • ,␣— шаблон, соответствующий
  • \t— замена шаблона --управляющая последовательность для табуляции
  • g (global )указывает sed заменить каждое совпадение строки, а не только первое.

Если вам нужно сопоставить более сложные шаблоны с помощью sed, вы можете использовать переключатель -E, чтобы шаблоны интерпретировались как регулярные выражения. Вы можете связать несколько выражений sed, если у каждого из них будет префикс -e.

Если данные csv находятся в файле, вот как передать их через sed:

cat my-data.csv | sed 's:, :\t:g' | tee my-data.tsv

или

cat my-data.csv | sed 's:, :\t:g' > my-data.tsv
0
28.01.2020, 04:18

Насколько я понимаю этот вопрос, вы хотели бы создать вывод в формате CSV со списком файлов. Другую интерпретацию см. в конце этого ответа.

Вот сценарий оболочки, который сделает это. Он использует версию statдля Linux, чтобы получить метку времени последней модификации.

#!/bin/sh

echo "PATHNAME,TIMESTAMP"
stat -c '"%n",%y' "$@"

После вывода заголовка этот сценарий просто вызывает statс путями, указанными в командной строке, чтобы получить метку времени последней модификации (см. руководство для statв вашей системе, чтобы выяснить, как изменить это ). Он печатает путь (в кавычках )и отметку времени.

Вы могли бы использовать это как

sh script.sh PATTERN >outputfile

Например:

$ sh script.sh *.log* *.tar >file.cvs

$ cat file.cvs
PATHNAME,TIMESTAMP
"dsmerror.log",2018-07-17 13:00:02.911711652 +0200
"dsminstr.log",2018-07-17 13:00:04.079726608 +0200
"dsminstr.log.bak",2018-05-13 18:00:03.231791181 +0200
"dsminstr.log.lock",2018-07-17 13:00:04.079726608 +0200
"archive_20170823-old.tar",2017-08-22 16:44:23.037803149 +0200
"archive_20170823.tar",2017-08-23 09:35:28.956158119 +0200
"archive_20180409.tar",2018-04-09 09:47:29.472374428 +0200
"archive-chr22.tar",2018-06-19 14:50:45.896447161 +0200
"gene_cache.tar",2018-04-25 09:44:15.518486626 +0200

Так как сценарий очень короткий, его команды могут быть написаны непосредственно в командной строке. Эквивалентная командная строка для приведенного выше примера будет

$ { echo "PATHNAME.TIMESTAMP"; stat -c '"%n",%y' *.log* *.tar; } >file.cvs

Теперь, когда у нас есть этот файл, мы можем захотеть отформатировать его для отчетов:

$ column -s, -t file.csv
PATHNAME                    TIMESTAMP
"dsmerror.log"              2018-07-17 13:00:02.911711652 +0200
"dsminstr.log"              2018-07-17 13:00:04.079726608 +0200
"dsminstr.log.bak"          2018-05-13 18:00:03.231791181 +0200
"dsminstr.log.lock"         2018-07-17 13:00:04.079726608 +0200
"archive_20170823-old.tar"  2017-08-22 16:44:23.037803149 +0200
"archive_20170823.tar"      2017-08-23 09:35:28.956158119 +0200
"archive_20180409.tar"      2018-04-09 09:47:29.472374428 +0200
"archive-chr22.tar"         2018-06-19 14:50:45.896447161 +0200
"gene_cache.tar"            2018-04-25 09:44:15.518486626 +0200

Это работает, если ни один из путей не содержит запятую.

Чтобы правильно отформатировать это с помощью парсера CSV, который также справится с путями, содержащими запятые:

$ csvlook file.csv
| PATHNAME                 | TIMESTAMP                           |
| ------------------------ | ----------------------------------- |
| dsmerror.log             | 2018-07-17 13:00:02.911711652 +0200 |
| dsminstr.log             | 2018-07-17 13:00:04.079726608 +0200 |
| dsminstr.log.bak         | 2018-05-13 18:00:03.231791181 +0200 |
| dsminstr.log.lock        | 2018-07-17 13:00:04.079726608 +0200 |
| archive_20170823-old.tar | 2017-08-22 16:44:23.037803149 +0200 |
| archive_20170823.tar     | 2017-08-23 09:35:28.956158119 +0200 |
| archive_20180409.tar     | 2018-04-09 09:47:29.472374428 +0200 |
| archive-chr22.tar        | 2018-06-19 14:50:45.896447161 +0200 |
| gene_cache.tar           | 2018-04-25 09:44:15.518486626 +0200 |

csvlookявляется частью csvkit, набора инструментов Python для работы с CSV-файлами.

0
28.01.2020, 04:18

Теги

Похожие вопросы