2012-04-24 6 views
1

Входные файлы выглядит следующим образом:переформатировать пространства вокруг определенного символа с использованием тр/СЕПГ/AWK

Header : 

      Data 
    Header2 : 

data for header2 

Header3 : data 3something 

Что я сделал:

sed "s/^ *//;s/ *$//;s/ \{1,\}/ /g" infile | tr -s "\n" > outfile 

Теперь это что-то вроде этого:

Header : 
Data 
Header2 : 
data for header2 
Header3 : data 3something 

и что я искал:

Header : 
Data 
Header2 : 
data for header2 
Header3 : 
data 3something 

Итак, что мне здесь не хватает?

+0

"Header3: данные 3something" все на одна строка в исходном файле. В вашей последовательности команд нет ничего, что разделило бы на две строки. –

ответ

0

Слегка модифицируя один вкладыш, я думаю, вы можете заставить его работать:

sed "s/^ *//;s/ *$//;s/ \{1,\}/ /g;s/: */:\n/" infile | tr -s "\n" > outfile 
+0

Спасибо, это сработало! – NitinAb

0

Это может работать для вас:

sed '/^$/d;s/^\s*//;/:\s*\(\S\+\)/s//:\n\1/' file 
Header : 
Data 
Header2 : 
data for header2 
Header3 : 
data 3something 
0
awk '$1 = $1 { if(NR!=8) print } END { print $1, $2 "\n" $3, $4 }' file 
Header : 
Data 
Header2 : 
data for header2 
Header3 : 
data 3something