2015-08-11 3 views
1

Я знаю, как использовать awk, чтобы изменить фиксированную ширину на CSV. У меня есть жесткий диск с несколькими тысячами файлов с фиксированной шириной. Содержат различные форматы ширины столбцов, но это «закодированный» на второй линии, как:Фиксированная ширина до CSV

Name   DOB  GENDER 
============== ======== ====== 
JOHN DOE  19870130 M 
MARY DOE  19850521 F 
MARTY MCFLY 19790320 M 

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

ответ

3

Использование GNU AWK для FIELDWIDTHS и \s/\S (может AWK прочитать вторую строку вместо того, чтобы требовать, чтобы я типа в ширину столбцов?):

$ cat tst.awk 
BEGIN { OFS="," } 
FNR==1 { names=$0; next } 
FNR==2 { 
    FIELDWIDTHS="" 
    while (match($0,/\S+\s*/)) { 
     FIELDWIDTHS = (FIELDWIDTHS ? FIELDWIDTHS " " : "") RLENGTH 
     $0 = substr($0,RSTART+RLENGTH) 
    } 
    $0 = names 
} 
{ 
    for (i=1;i<=NF;i++) { 
     sub(/\s+$/,"",$i) 
     printf "%s%s", $i, (i<NF?OFS:ORS) 
    } 
} 

$ awk -f tst.awk file 
Name,DOB,GENDER 
JOHN DOE,19870130,M 
MARY DOE,19850521,F 
MARTY MCFLY,19790320,M 

Вышеупомянутое будет работать, даже если ваша первая строка содержит пробелы в именах столбцов.

+1

узнал много awk из этого :) –

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