我有一个文本文件,其中的数据由分隔符分隔。我需要运行一个循环,它将检查每一行并打印具有空白记录的行号。文本文件可以包含任意数量的行 我的文本文件如下所示:
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 :(得分: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
开关添加匹配的行号。