2015-05-08 3 views
1

Я хотел бы сохранить каждую линию моего файла как отдельный файл, используя столбец 1 в качестве имени файлаСохранить каждую строку как отдельный файл

AT1G01010  chr1 3631 5899 
AT1G01020  chr1 6790 8737 
AT1G01030  chr1 11649 13714 

Желаемой вывода представляет собой отдельный файл для AT1G01010.txt чье содержимое

AT1G01010  chr1 3631 5899 

Я знаю, что в Vim это возможно с помощью команды

:g/^/execute '.w '.line('.').'.txt' 

Но это роды tes - файл, названный в честь номера строки, что не совсем то, что я хочу.

ответ

2

Попробуйте этот сценарий:

while read line 
do 
    name=`echo $line | awk '{print $1}'` 
    echo "$line" > $name.txt 
done < source_file.txt 
1

В BASH это так просто, как это

cat test.txt | while read line 
do 
    echo $line > $(cut -d " " -f1 <<< $line).txt 
done 
2

Вы близки. Вместо line('.') вы можете использовать expand('<cword>'), чтобы извлечь слово под курсором и включить его в имя файла. Это использует тот факт, что :global помещает курсор в первый символ в каждой строке.

:g/^/execute '.w '.expand('<cword>').'.txt' 

Для Другими словами, вы должны использовать комбинацию getline('.') и matchstr() (или переместить курсор первый).

1
qq0"ayEV:w <C-R>a.txt<CR>q:%[email protected] 

(где <C-R> является контроль ключ + г и <CR> является клавиша ввода)

Это следует записать и выполнить макрос, который выполняется :w FIRST_COLUMN.txt для каждой строки в файле.

+0

Я знал, что кто-то придумает решение для макросов! –

Смежные вопросы