2013-12-12 4 views
1

У меня есть файл, и это в форме:Bash Script Запись файла Out В зависимости от содержания

Thread1.Action1, wahhhhhh 
Thread1.Action1, blahhhhhh 
Thread1.Action2, wooooooo 
Thread1.Action2, weeeeeee 
Thread1.Action2, baaaaaaa 
Thread2.Action1, mooooooo 
Thread2.Action2, wooooooof 

Что мне нужно сделать, это:

Написать файл, где имя файла является первым бит перед запятой. Затем этот файл должен содержать все связанные с ним строки. например: Там должно быть 4 файла в этом случае: Thread1.Action1.out, Thread1.Action2.out, Thread2.Action1.out и Thread2.Action2.out

Например, Thread1.Action2.out должен содержать :

Thread1.Action2, wooooooo 
Thread1.Action2, weeeeeee 
Thread1.Action2, baaaaaaa 

Thread2.Action1.out должен содержать:

Thread2.Action1, mooooooo 

и т.д ..

Примечание: я хочу, чтобы это было агностически для имени первого столбца - например: я не обязательно буду знать, что данные находятся в первом столбце перед выполнением скрипта, но будут группы его ...

Я хочу написать сценарий bash, который сможет это сделать. Я пробовал делать бит в awk, но он становится очень грязным.

Любая помощь?

+0

Пожалуйста, покажите ваши попытки. Вы можете быть рядом. – fedorqui

ответ

7
awk -F, '{print > $1".out"}' your_file 

Для Вашего комментария: exceute следующей команды для создания всех каталогов одновременно:

awk -F. '{print $1}' your_file | sort -u | xargs mkdir 

Теперь необходимо выполнить следующую команду:

awk -F, '{split($1,a,".");print >a[1]"/"$1".out"}' your_file 
+1

'awk' - зверь! :) ⁺¹! – Alfe

+0

Спасибо, что, кажется, это сделали. Не понял, что это будет так просто! Если бы я хотел немного изменить его, чтобы он создавал файлы в каталоге, где указан каталог Thread. часть, как бы вы это сделали? например: Thread1.Action1.out и Thread1.Action2.out находятся в каталоге Thread1 и т. д. – RobM

+0

Тогда, я думаю, вы можете написать сценарий оболочки оболочки, чтобы проверить, существует ли каталог вокруг этой команды. Если его нет, создайте каталог, а затем выполните команду else, просто выполните команду. – Vijay

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