2014-03-26 3 views
1

я пытаюсь избежать, чтобы написать код, который делает выясняя, сценарий ...обработки файлов в папках в Баш

В принципе, у меня есть тысячи файлов в папке ... Каждый файл имеет следующий формат

primary_id 
secondary_id,score,date 

Пример будет:

file1.txt 
1 
12,3,2003-12-29 
13,2,2003-12-29 

file2.txt 
2 
22,1,2004-01-20 

То, что я хочу is..to обработать эти и создать следующий вывод для каждого из файлов:

output1.txt 
12,1,3 
13,1,2 

output2.txt 
22,2,1 

и так далее

Как я сделать это с помощью Баш, AWK UNIX сценариев инструменты

ответ

2
$ awk ' 
    BEGIN { FS=OFS="," } 
    FNR==1 { k=$0; close(fname); fname="output"++nr".txt"; next } 
    { print $1,k,$2 > fname } 
' file1.txt file2.txt 

$ cat output1.txt 
12,1,3 
13,1,2 

$ cat output2.txt 
22,2,1 

Если вы можете иметь пустые входные файлы то вы МОЖЕТЕ хотеть другое решение (возможно, gawk с ARGIND и/или BEGINFILE/ENDFILE), но вам нужно будет рассказать нам, как вы хотите, чтобы с ними обращались.

+0

Даже было принято, как я полагаю, использовать primary_id в новом имени выходного файла напрямую. – BMW

+0

Это возможность, но она не может быть уникальной во всех входных файлах, а затем что? Нам понадобится OP, чтобы предоставить более представительный ввод и/или рассказать нам больше о его требованиях, чтобы знать, нужно ли что-либо менять. –

2

Другой AWK:

awk 'NR==1{id=$1;next}{print $1,id,$2}' FS=',' OFS=',' infile 
+0

для нескольких файлов, измените 'NR' на' FNR', поэтому его можно изменить на: 'awk 'FNR == 1 {id = $ 1; next} {print $ 1, id, $ 2>" output "id" .txt "} 'FS =', 'OFS =', 'file * .txt' – BMW

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