2015-05-21 48 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