2015-06-23 4 views
-5

Имейте входной файл с 200 строками, каждая строка - только одно поле, которое является числом. .Unix Shell Programming

89970060122507635800 

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

INSERT,89970060122507635800,425062250763580,,0000,29514215,0000,29514215,,,,NORMAL,425062260621583,Blank,sim,9877 

где:

  1. Все поля имеют постоянное значение (включая пустые значения внутри запятых), за исключением второго и третьего
  2. Второе поле заполняется входным файлом, третье - удалением las t из второго поля и заменить в начале 899700601 на 42506 (как в примере).

Я уверен, что смогу найти способы, как это сделать (и я постараюсь, прежде чем получить ответы), но мне больше интересно узнать, какие из них могут быть более эффективными, на ваш взгляд. Awk, sed, сценарий оболочки с использованием обоих?

+5

«Просьба предоставить мне полное решение, чтобы получить наилучший вариант». Это предложение, которое закрывает ваш вопрос, поэтому я удалил его. Как и было, было бы лучше, если бы вы сделали свое исследование * до того, как задали вопрос. «Я уверен, что могу найти способы, как это сделать ...» –

+0

Возможно, вы можете сделать это с помощью любой оболочки, 'sed' или' awk'. Я бы предложил 'awk' перед оболочкой и оболочкой перед' sed'. –

+0

Просить совета в выборе инструмента для использования трудно, чтобы спастись от «слишком широкого». Нет недостатка в подходах, которые будут работать - включая родную оболочку без внешних инструментов (без sed, no awk, ничего другого), но это сводится к мнению, если вы не дадите достаточно подробностей, чтобы узнать, какая эффективность вопросы. (Мы занимаемся небольшим количеством строк, которые мы заботимся о том, чтобы минимизировать время запуска или достаточно большое количество, которое нам больше всего волнует увеличение пропускной способности? У нас есть высокопроизводительная оболочка, такая как ksh93, или нам нужно иметь дело с bash? и т. д.). –

ответ

0

Это заменит начало «123» на входе «AAA» и обрезает последнюю цифру для третьего поля.

awk -v OFS="," '{$2=substr($1,1,length($1)-1); gsub(/^123/,"AAA",$1); print "bla bla bla",$1,$2,"bla bla bla"}' 

заменить магические значения и добавить правильный шаблон для оператора печати.

+0

извините, дорогая, но gsub не работает. Я сделал что-то подобное в awk-файле, но он обрезает последнюю цифру, не заменяя эти цифры :-( –

+0

еще раз, мой BAD ... он действительно работал, и это было похоже на то, как я это сделал :-) –