Разбор первого столбца файла csv в новый файл
Операционная система: OSX
Метод: из командной строки, так что используйте sed, cut, gawk, хотя предпочтительно нет модулей установки.
По сути, я пытаюсь взять первый столбец csv файла и проанализировать его на новый файл.
Пример входного файла
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
Желаемый выход
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
EXAMPLE4
Итак, я хочу первый столбец.
Вот что я пробовал до сих пор:
awk -F"," '{print $1}' in.csv > out.txt
awk -F"," '{for (i=2;i<=NF;i++)}' in.csv > out.txt
awk -F"," 'BEGIN { OFS="," }' '{print $1}' in.csv > out.txt
cat in.csv | cut -d \, -f 1 > out.txt
Нет, похоже, что они работают, либо они просто печатают первую строку, либо ничего вообще, поэтому я бы предположил, что она не читается по очереди.
Ответы
Ответ 1
Ваш последний вариант отлично подходит для меня:
$ cat > in.csv # Then pasted the example input followed by Ctrl+D:
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
[Ctrl+D]
$ cat in.csv | cut -d, -f1
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
EXAMPLE4
Может быть, концы строк кусают вас здесь? Если файл имеет стиль DOS или даже окончание строки в стиле старого Mac, это может вызвать странное поведение. Попробуйте запустить file in.csv
и посмотрите, что он придумал.
$ file in.unix.csv
in.unix.csv: ASCII text
$ file in.dos.csv
in.dos.csv: ASCII text, with CRLF line terminators
Если это ваша ситуация, используйте инструмент dos2unix
для преобразования файла.
Изменить: на OS X кажется flip
- это то, что вы хотите.
Ответ 2
Я скопировал ваш образец ввода, сохранил его как in.csv, а затем выполнил вашу первую строку,
awk -F"," '{print $1}' in.csv > out.txt
и он работал отлично, например:
$ emacs in.csv
$ cat in.csv
EXAMPLEfoo,60,6
EXAMPLEbar,30,6
EXAMPLE1,60,3
EXAMPLE2,120,6
EXAMPLE3,60,6
EXAMPLE4,30,6
$ awk -F"," '{print $1}' in.csv > out.txt
$ cat out.txt
EXAMPLEfoo
EXAMPLEbar
EXAMPLE1
EXAMPLE2
EXAMPLE3
Это в Terminal.app на OS X 10.5
Ответ 3
Для меня cut выдает ожидаемый результат:
cut -d, -f1 < in.csv > out.txt
Ответ 4
Если Perl является опцией:
perl -F, -lane 'print $F[0]' in.csv > out.txt
Используются следующие параметры командной строки:
-
-n
цикл вокруг каждой строки входного файла
-
-l
удаляет новые строки перед обработкой и добавляет их обратно
-
-a
автоматический режим - разделение входных строк на массив @F
. По умолчанию разбивается на пробелы.
-
-e
выполнить код perl
-
-F
модификатор авторасширения, в этом случае разбивается на ,
@F
- это массив слов в каждой строке, индексированный начиная с $F[0]