2016-03-27 2 views
1

Это то, что исходный файл выглядитвыходной файл форматирования с пробелами Unix

cat new 

Jackson, Bob D. C0001 book pizza apple 4.00 123as 
Filer, Jack C0002 happy apple hat 4.00 124ab 
Metro, Jim K. C0003 kindle pizza grape 4.00 125ac 

Я имею вопрос о форматировании этого файла для имен, которые не имеют отчества.

$ cat new | awk '{printf "%10s %7s %3s %6s %7s %6s %6s %4s %6s\n" $1, $2, $3, $4, $5, $6, $7, $8, $9}' 

Jackson, Bob D. C0001 book pizza apple 4.00 123as 
Filer, Jack C0002 happy apple hat 4.00 124ab 
Metro, Jim K. C0003 kindle pizza grape 4.00 125ac 

Теперь вот что формат выходит как то, что я хотел бы, чтобы это было в каждом столбце должны быть разнесены 1 место стал частью так, как это имя Джексон, Боб Д. столбец c0001 представляет собой столбец в настоящее время имя имеет пробелы между буквами. Проблема в том, люди без отчества Мессинг все вверх, как я могу форматировать этот файл, чтобы выглядеть так

Jackson, Bob D. C0001 book pizza apple 4.00 123as 
Filer, Jack  C0002 happy apple hat 4.00 124ab 
Metro, Jim K. C0003 kindle pizza grape 4.00 125ac 

Так что все линии вверх и выглядит чистой какие-либо вопросы, дайте мне знать заранее спасибо вам помочь!

+0

Просьба показать образец входного файла, который вы использовали для его создания. – Will

+0

Вы назначаете только три символа имени, почему вы ожидаете, что он будет иметь ширину больше? – pfnuesel

+0

Нет, он назначает 10 имени @pfnuesel; 3 - это число. – Will

ответ

1

awk на помощь!

$ awk -v OFS='~' '{$2=$2" "$3;$3=""} 
      NF==10{$2=$2" "$4;$4=""} 
      NF==9{$3=$3 OFS ""}1' file | column -ts~ 

1 Jackson, Bob D. C0001 book pizza apple 4.00 123as 
2 Filer, Jack  C0002 happy apple hat 4.00 124ab 
3 Metro, Jim K. C0003 kindle pizza grape 4.00 125ac 

вы можете перенести поля в awk в качестве альтернативного решения, но это работает хорошо.

установка разделителя поля вывода (OFS) для некоторых неиспользованных символов (здесь тильда) и позволяет column обрабатывать форматирование этим разделителем.

+0

Ok У меня была ошибка в исходном содержимом файла, на котором я смотрел один, который я пытался отформатировать, так, как я его настроил, теперь влияет на это? потому что он все еще пытается вытащить c0002 в качестве среднего имени и не уверен, почему – NewEffect

+0

Сдвиньте все поля на один. $ 2 -> $ 1 и т. Д. И условия должны быть уменьшены на единицу. – karakfa

+0

Извините, что плохо с этой командой OFS, что мы уменьшаем? мало нового для awk, все еще жаль путаницы – NewEffect

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