2012-04-24 72 views
1

輸入文件看起來是這樣的:格式化空間TR/SED/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」 是所有上原始文件中有一行。你的命令序列中沒有任何東西可以將它分成兩行。 – 2012-04-24 22:59:26

回答

0

通過稍微修改您的一個襯墊,我想你可以把它的工作:

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

感謝它的工作! – NitinAb 2012-04-24 23:14:01

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