2015-07-07 2 views
0

У меня есть файл (out.txt), как это:проблема форматирования файла Баш

fileOne.txt 100 ascii 
fileTwo.txt 200 ascii 
test  90 other 

Я хочу, чтобы создать еще один файл, как это:

Filename Size Type 
fileOne.txt 100 ascii 
fileTwo.txt 200 ascii 
test  90 other 

и по этой причине я использовал команду Gawk и мой файл AWK это:

BEGIN { 
     print "-----------------------------------------------------\n" 
     print " Report files in directory\n\n" 
     printf "\t%s\t\t%s\t\t%s\n","File Name","Size","Type" 
} 
    { 
    printf "\t%s\t\t%s\t\t%d\n",$1,$2,$3 

} 

это работает для меня, но моя проблема заключается в следующем: если есть файл с длинным именем, это имя также идет к колонку типа и значение размера печатается все в порядке в столбце размера, и я получаю вещь:

Filename Type Size 
fileWithLongName.txt ascii 100 
fileTwo.txt ascii 200 
test  other 90 

ответ

2

Если вы можете использовать временный файл:

YOUR_AWK_SCRIPT_ABOVE | column -t > temp && mv temp ORIGINAL_FILENAME 

column -t по умолчанию - разделительный столбец пробелами. Чтобы указать набор символов для разметки столбцов, вы можете выбрать -s.

Вы можете использовать:

#name:script.awk 
BEGIN{ 
    printf "%s\t%s\t%s\n","File Name","Size","Type" 
} 
{ 
    printf "%s\t%s\t%d\n",$1,$2,$3 
} 

Тогда:

awk -f script.awk INPUT_FILENAME | column -s $'\t' -t > temp && mv temp INPUT_FILENAME 

Вы можете добавить:

print "-----------------------------------------------------\n" 
print " Report files in directory\n\n" 

линии позже после завершения выше команды.

+0

Я думаю, что временный файл не нужен. – Will

+0

@ Не могу найти, как записать вывод 'column' в файл, поэтому я использовал временный файл. –

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