Парсинг первого столбца файла CSV в новый файл

Операционная система: Метод OSX: Из командной строки, таким образом с помощью sed, сокращения, простофили, хотя предпочтительно никакие модули установки.

По существу я пытаюсь взять первый столбец файла 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

Ни один, кажется, не работает, или они просто печатают первую строку или ничто вообще, таким образом, я предположил бы, что ей не удается читать линию за линией.

32
задан S1syphus 16 April 2010 в 11:28
поделиться

3 ответа

У меня отлично работает ваш последний вариант:

$ 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, это может вызвать странное поведение. Попробуйте запустить файл в формате .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 - это то, что вам нужно .

39
ответ дан 27 November 2019 в 20:42
поделиться

Для меня вырезание дает ожидаемый результат:

cut -d, -f1 < in.csv > out.txt
4
ответ дан 27 November 2019 в 20:42
поделиться

Я скопировал ваш образец ввода, сохранил его как 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

12
ответ дан 27 November 2019 в 20:42
поделиться
Другие вопросы по тегам:

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