2015-05-21 47 views
-1

我有一個文本文件,其數據由分隔符分隔。我需要運行一個循環來檢查每一行並打印有空白記錄的行號。文本文件可以有任意數量的行。
我的文本文件看起來像這樣:查找文本文件中的空白記錄

398569527JOM08021952|XIMH009|M|20150331 
398569527JOM08021952|XIMH009|M|20150331 
525230008DEF12061960|XSTAR002|M|20150331 

所以有時它可以像:

525230008DEF12061960|XSTAR001|  |20150331 
525230008DEF12061960|XSTAR001|  |20150331 
          |XIMH009| | 
585485743JAM08241950|   |H|20150331 

所以輸出將告訴我,行號1,2,3和4的空白記錄。 任何人都可以請幫我一些想法?

回答

0

你可以使用awk來做到這一點:

$ awk -F'|' '{for (i=1; i<=NF; ++i) if ($i ~ /^[[:space:]]*$/) {print NR, $0; next}}' file 
1 525230008DEF12061960|XSTAR001|  |20150331 
2 525230008DEF12061960|XSTAR001|  |20150331 
3       |XIMH009| | 
4 585485743JAM08241950|   |H|20150331 

腳本遍歷每個字段,使用|作爲字段分隔符。如果一個字段爲空或僅包含空格,則會打印行號NR以及行$0的內容。 next跳到下一行,以避免重複輸出,如果有多個缺失字段。

這裏的另一種方式,你可以做到這一點,用grep:

$ grep -E '(^|\|)[[:space:]]*(\||$)' file 

此行的起點或|後跟零個或多個空格,後面是|或行的結尾匹配。您可以使用-n開關添加匹配的行號。

+0

謝謝湯姆:) ...它的工作 – saurav7777777

+0

我很高興聽到它。如果您的問題得到解決,請不要忘記接受我的答案,只需點擊旁邊的勾號即可。 –

+0

嗨湯姆..還有另一個文件格式如下: – saurav7777777