2014-02-04 3 views
5

Набор данных - это один большой файл с тремя столбцами: идентификатор раздела, что-то неактуальное и строка текста. Пример может выглядеть следующим образом:Использование первого поля в AWK в качестве имени файла

A01 001 This is a simple test. 
A01 002 Just for exemplary purpose. 
A01 003 
A02 001 This is another text 

Я хочу использовать первую колонку (в этом примере A01 и A02, которые представляют собой различные тексты), чтобы быть именем файла, whichs содержания все в этой строке после того, вторая колонка.

В приведенном выше примере должно привести два файла, один с именем A01 и содержание:

This is a simple test. 
Just for exemplary purpose. 

и еще один A02 с содержанием:

This is another text 

Мои вопросы:

  1. Является ли AWK подходящей программой для этой задачи? Или, возможно, есть более удобные способы сделать это?
  2. Как выполнить эту задачу?

ответ

7

awk подходит для таких задач. Если вы не возражаете, чтобы иметь некоторые начальные пробелы, вы можете использовать:

awk '{f=$1; $1=$2=""; print > f}' file 

Это опустошает первое и второе поле, а затем напечатать все строки в f файл, который был ранее сохраненным в качестве первого поля.

И в случае, если эти пространства потрудившись, вы можете удалить их с sub(" ", ""):

awk '{f=$1; $1=$2=""; sub(" ", ""); print > f}' file 
+1

+1 приятное использование sub(). Я бы написал утомительный 'for (i = 3; i <= NF; i ++) $ (i-2) = $ 1; NF- = 2'. Обобщенным использованием будет 'sub (OFS OFS, ++)' –

2

Bash тоже будет работать. Вероятно, медленнее, чем awk, если это проблема

while read -r id num line; do 
    [[ $line ]] && echo "$line" >> $id 
done < file 
Смежные вопросы