разделение файла со строками, разделенными табуляцией, на два файла

разделение файла со строками, разделенными табуляцией, на два файла

Как я могу использовать что-то вроде того, sedчтобы разделить файл на два, так чтобы файл, содержащий

eric    shwartz
david    snyder

где 4 пробела между записями на самом деле являются символами табуляции в двух файлах, например:

file1:

eric
david

file2:

shwartz
snyder

Поэтому он помещает все, что находится после табуляции в каждой строке, в другой файл.

решение1

Решением может быть:

awk '{ print $1 > "file1"; print $2 > "file2"}' file 

решение2

Обязательно ли это должен быть один сценарий? Если нет, то можно сделать так:

cut -f 1 file > file1
cut -f 2 file > file2

cutвыбирает столбец (по умолчанию разделенный табуляцией). -f — это флаг, который принимает число в качестве аргумента, и это число является номером столбца.

решение3

Я не думаю, что может быть что-то проще, чемawkподход,Итак, вот решение на Perl, которое работает для любого количества столбцов, сохраняя каждый в отдельном файле:

perl -ane 'unless($handles[0]){
            for(1..$#F+1){
                open(my $fh, ">","file$_"); 
                $handles[$_-1] = $fh
            }
           } 
           for my $i (0..$#F){
                print { $handles[$i] } "$F[$i]\n"
           }' file 

Имеем такой входной файл:

$ cat file
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad
foo bar baz bad

Приведенный выше скрипт создаст файлы, file1каждый file4из которых будет содержать соответствующий столбец.


Конечно, вы можете сделать то же самое в awk, гораздо проще и элегантнее, но в чем тут веселье?

awk '{for(i=1;i<=NF;i++){print $i > "file"i}}' file 

решение4

moreutils (доступно во многих репозиториях дистрибутивов илиhttp://joeyh.name/code/moreutils/) имеет несколько полезных утилит, одна из которых поможет здесь:

pee 'cut -f1 >file1' 'cut -f2 >file2' < file

Связанный контент