2015-12-02 34 views
0

我有一個示例XML文件input.xml捆綁相應的XML項

<employee> 
<userid>1</userid> 
<name>Puneetha B M</name> 
<designation>Developer</designation> 
</employee> 
<employee> 
<userid>2</userid> 
<name>Bhoomika</name> 
<designation>Analyst</designation> 
</employee> 

現在我需要把它改造成以下格式(輸出文件名output.xmlb):我需要把每個記錄一行

<employee> <userid>1</userid> <name>Puneetha B M</name> <designation>Developer</designation> </employee> 
<employee> <userid>2</userid> <name>Bhoomika</name> <designation>Analyst</designation> </employee> 

對於此轉換,作者在unix中使用了以下命令。

cat input.xml | tr -d '&' | tr '\n' ' ' | tr '\r' ' ' | sed 's|</employee>|</employee>\n|g' | grep -v '^\s*$' > output.xmlb 

任何人都請幫我理解這些unix命令是如何工作的。 如果你不明白我的問題很好的PLZ訪問鏈接:http://blog.puneethabm.in/load-xml-file-to-hive-without-java-code/ 這裏我想了解第一步

+0

[explainshell.com](http://explainshell.com/explain?cmd=cat+input.xml+%7C+tr+-d+%27% 26%27 +%7C + TR +%27%5 CN%27 +%27 +%27 +%7C + TR +%27%5CR%27 +%27 +%27 +%7C + sed的+%-27%7C%3C%2Femployee %3E%7C%3C%2Femployee%3E%5Cn%7Cg%27 +%7C + grep + -v +%27%5E%5Cs *%24%27 +%3E + output.xmlb)給你一個開始。如果您需要更多地瞭解任何特定命令正在做什麼,可以閱讀其手冊頁以獲取更多詳細信息(部分信息在前一個鏈接中給出)。你有更具體的問題嗎? –

+0

謝謝你。該網站是一流的。我正在瞭解數據如何通過每個命令逐一流動。 –

回答

0

GAWK測試OK

awk -F'<' '!a{a=$2;next}{if($0~a){print FS a,b,$0;a=b=""}else{b=b?b" "$0:$0}}' file 
<employee> <userid>1</userid> <name>Puneetha B M</name> <designation>Developer</designation> </employee> 
<employee> <userid>2</userid> <name>Bhoomika</name> <designation>Analyst</designation> </employee> 

或使用桑達

sed '/employee/{:a;N;/<\/employee>/!ba;s/\n/ /g;}' file 
+0

不是對「如何工作」這個問題的回答。 –

0

使用此項:

tr '\n' ' ' <infile | sed 's|\(</employee>\) |\1\n|g' >outfile 
  • tr用空格替換所有換行符。
  • sed在關閉員工標籤後添加換行符。

輸出:

<employee> <userid>1</userid> <name>Puneetha B M</name> <designation>Developer</designation> </employee> 
<employee> <userid>2</userid> <name>Bhoomika</name> <designation>Analyst</designation> </employee> 
+0

不是對「如何工作」這個問題的回答。 –

+0

你能告訴我下面的部分是如何工作的: sed's | | \ n | g'| grep -v'^ \ s * $' –