2016-08-02 29 views
2


讓結果文件包含來自不同XML文件的值。
該文件有5列以「;」分隔在所有模式匹配的情況下。
第一列=中性指數
第二列=特定指數1
三列=文件不包含指數1
第四欄=特定索引2
第五欄=文件不包含索引2
不匹配模式與索引2(就像過去三年行)也應該有5列,而最後兩列應該像前兩行一樣。
的排序的文件看起來像:在排序文件中的模式之前在列表中插入列分隔符

AAA;AAA.1D1;file_X;AAA.2D1;file_Y 
AAA;AAA.1E1;file_A;AAA.2E1;file_B 
AAA;AAA.2F1;file_C 
BBB;BBB.2G1;file_D 
CCC;CCC.1B1;file_H 
YYY;YYY.2M1;file_N 


期望的結果將是:

AAA;AAA.1D1;file_X;AAA.2D1;file_Y 
AAA;AAA.1E1;file_A;AAA.2E1;file_B 
AAA;;;AAA.2F1;file_C 
BBB;;;BBB.2G1;file_D 
CCC;CCC.1B1;file_H;; 
YYY;;;YYY.2M1;file_N 


如果您有任何想法/提示,您的幫助表示讚賞!提前致謝!

回答

2

更新回答

在更新需求的光,我想你想是這樣的:

awk -F';' 'NF==3 && $2~/\.1/{$0=$0 ";;"} 
      NF==3 && $2~/\.2/{$0=$1 ";;;" $2 ";" $3} 1' file 

可以寫成一個班輪:

awk -F';' 'NF==3 && $2~/\.1/{$0=$0 ";;"} NF==3 && $2~/\.2/{$0=$1 ";;;" $2 ";" $3} 1' YourFile 

原創回答

我會做到這一點與awk

awk -F';' 'NF==3{$0=$1 ";;;" $2 ";" $3}1' YourFile 

AAA;AAA.1D1;file_X;AAA.2D1;file_Y 
AAA;AAA.1E1;file_A;AAA.2E1;file_B 
AAA;;;AAA.2F1;file_C 
BBB;;;BBB.2G1;file_D 
YYY;;;YYY.2M1;file_N 

,說... 「上​​使用​​3210作爲字段分隔運行awk。如果任何一行中只有3個字段,請使用現有的第一個字段,三個分號和其他兩個字段重新創建該行。該1末,意味着打印當前line`」

如果你不使用awk多,NF指字段的數量,$0指整個當前行,$1指的是第一場$2指的是第二個字段等

+0

謝謝!它的工作原理我一直試圖通過搜索模式* .2 *並使用awk,但總是失敗,以獲得匹配的線,非常感謝。短而高效!感謝您的詳細解釋! – adamerikus

+0

剛剛通過所有文件測試,並認爲我必須調整它的模式*.1**.2*,因爲現在面對的是我也有條目,如CCC;CCC.1B1;file_H,應該變成CCC;CCC.1B1;file_H;;。 – adamerikus

+0

閱讀*評論*部分的格式化數據確實很難。請點擊原始問題下的「編輯」,更新輸入數據和結果數據以更好地反映文件,然後我會嘗試更新相應的答案。 –

相關問題