2012-06-20 6 views
0

У меня есть файлы в виде:SED: объединение выбора полей из нескольких строк в одну строку

random stuff 
more random stuff, etc 
more random stuff, etc 
05201206 field1 field2 field3 field4 field5 
05201212 field1 field2 field3 field4 field5 
05201218 field1 field2 field3 field4 field5 

где поля являются широчайшие и Лон

То, что я хочу сделать, это найти все строки, начинаются с «05» и принять поля 1, 3 - от каждого, а затем распечатать результаты всех на одну строку в порядке найти, например, как: (пытаясь написать KML-код)

field1, field3, 0 field1, field3, 0 field1, field3, 0 field1, field3, 0 

Кроме того, связанный с этим вопрос - матовый коврик h сделать в sed? В идеале, каждый из латов и логов должен быть разделен на 10,0 перед печатью результатов.

ответ

1

Вы не можете сделать математику в sed. awk - правильный инструмент для обработки и обработки полей.

awk '/^05/{ $4/=10.0;$2/=10.0;out=out$2","$4","}END{print out }' inputFile 
+0

Согласен - 'awk' - соответствующая команда здесь. [Вот учебник.] (Http://www.grymoire.com/Unix/Awk.html) –

0

awk явно правильный инструмент для работы, но вы можете, конечно, использовать sed для части задачи. Фильтры мощная идея:

<input sed -n /^05/p     | # print only lines starting "05" 
    awk '{print 0, $2/10", " $4/10", "}' | # print scaled columns 2 and 4 
    sed '1s/^0 //'      | # Remove leading "0 " 
    tr -d '\n'       ; # Remove all newlines 
    echo " 0"        # append trailing "0" and newline 

Обратите внимание, что SEDS совершенно лишний здесь (первый, несомненно, будет заменен на сопоставлении с образцом на первый AWK); Дело в том, что вы можете очень легко создать необходимую обработку, создав простые инструменты для выполнения каждой задачи и запуская их все вместе.

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