2017-02-09 9 views
0

Я искал достаточно и ничего не работает для меня. Это было 2 дня, и я должен задать этот вопрос. Я использую Awk с Cygwin. Мои данные выглядит следующим образомCygwin Awk Разделить файл на несколько файлов и сохранить с правильными именами файлов

Center Name,Account Number,Client Status 
2001 - LA Center,xxxx,xxxx,xxxx,xxx 
2001 - LA Center,xxxx,xxxx,xxxx,xxx 
3005 - SD Center,xxxx,xxxx,xxxx,xxx 
3005 - SD Center,xxxx,xxxx,xxxx,xxx 

Как вы можете догадаться, я пытаюсь разделить этот файл на несколько файлов на основе имени центра, который является первым column.It будет также приятно скопировать заголовки к каждому файлу , Ожидаемый результат:

Center Name,Account Number,Client Status 
2001 - LA Center,xxxx,xxxx,xxxx,xxx 
2001 - LA Center,xxxx,xxxx,xxxx,xxx 

Center Name,Account Number,Client Status 
3005 - SD Center,xxxx,xxxx,xxxx,xxx 
3005 - SD Center,xxxx,xxxx,xxxx,xxx 

Спасибо за ваше время.

ответ

1

Все, что вам нужно:

awk -F, '{print > $1}' file 

или если вы хотите, чтобы заменить все пробелы в символы подчеркивания в именах файлов:

awk -F, '{f=$1; gsub(/[[:space:]]+/,"_",f); print > f}' file 

Если вы не используете GNU AWK, то вам, возможно, потребуется чтобы закрыть() выходные файлы, как вы идете, чтобы избежать ошибки «слишком много открытых файлов». Вы находитесь на cygwin и так уже используете gawk, так что это не проблема для вас, просто для тех, кто может это прочитать и не использует gawk (get gawk!).

Да, и если вы хотите строку заголовка дублируется во всех выходных файлов это может сделать это (непроверенные):

awk -F, 'NR==1{h=$0 ORS} {print h $0 > $1; h=""}' file 

или, возможно, это, также непроверенные из-за отсутствия ввода/вывода, чтобы проверить против:

awk -F, 'NR==1{h=$0; next} !seen[$1]++{print h > $1} {print > $1}' file 

ОР имел управляющие символы в его входном файле, вот как очистить их с awk (и почему бы не попробовать его с tr):

$ cat file 
abc 
def 

$ cat -v file 
a^@b^@c^M 
d^@e^@f^M 

$ tr -d '[:cntrl:]' < file | cat -v 
abcdef$ 

$ awk '{gsub(/[[:cntrl:]]/,"")}1' file | cat -v 
abc 
def