在文本文件中查找空白记录

时间:2015-05-21 11:46:00

标签: shell

我有一个文本文件,其中的数据由分隔符分隔。我需要运行一个循环,它将检查每一行并打印具有空白记录的行号。文本文件可以包含任意数量的行 我的文本文件如下所示:

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有空白记录。 有人可以帮我一些想法吗?

1 个答案:

答案 0 :(得分: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开关添加匹配的行号。