Создать CSV из текстового файла с помощью консоли Linux - PullRequest
1 голос
/ 22 сентября 2011

У меня есть текстовый файл, который выглядит следующим образом:

    line1
    line2
    line3
    line4
    line5
    "" "" keep going for a long time

Я пытаюсь придумать скрипт, который бы дал мне:

    line1,line2,line3,line4,line5
    line6,line7,line8,line9,line10

Так что запятые разделяют ихвсе и добавьте новую строку каждые 5. Любые идеи?

Ответы [ 5 ]

4 голосов
/ 22 сентября 2011
paste -d, - - - - - < filename

справочная страница

1 голос
/ 22 сентября 2011
cat foo.txt | xargs -L 5 | tr ' ' ','

Плюсом здесь является то, что вы также можете изменить аргументы '5' на произвольное значение, и скрипт будет работать как положено.

1 голос
/ 22 сентября 2011

Немного грубовато, но выполнимо, прибегая к, возможно, более приятному Perl-решению.Параметр -n 5 arg для xargs позволяет просто отправить 5 аргументов скрипту оболочки, который мы печатаем.

$ cat echo.sh 
echo $1,$2,$3,$4,$5
$ $ cat file.txt 
a
b
c
d
e
1
2
3
4
5
$ cat file  | xargs -n 5 ./echo.sh
a,b,c,d,e
1,2,3,4,5
$
0 голосов
/ 22 сентября 2011

Python по умолчанию устанавливается в каждый дистрибутив Linux.

Я бы предложил следующий скрипт на python:

#!/usr/bin/env python
import argparse, csv
if __name__ == '__main__':

    parser = argparse.ArgumentParser(description='convert text to csv', version='%(prog)s 1.0')
    parser.add_argument('infile', nargs='+', type=str, help='list of input files')
    parser.add_argument('--out', type=str, default='temp.csv', help='name of output file')
    args = parser.parse_args()

    writer = csv.DictWriter(open(args.out, "wb"), ["field 1","field 2","field 3","field 4","field 5"], dialect='excel')
    # write the header at the top of the file
    writer.writeheader()
    row = []

    for fname in args.infile:
        with open(fname) as df:
            for line in df.readlines():
                row.append(line.strip('\n'))
                if len(row) = 5:
                    writer.writerow(row)
                    row = []
    del writer

Вы должны быть в состоянии скопировать код в файл и запустить его прямо из командной строки. Например: text2csv.py yourinput.txt, если, конечно, вы назвали файл text2csv.py.

0 голосов
/ 22 сентября 2011

Если у вас есть Perl, попробуйте это:

perl -ane '++$i; chomp; $line.=$_; if($i==5) {print "$line\n"; $line=""; $i=0;} else {$line.=","} ' <infile >outfile
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...