如何检查任何管道分隔的数据是否为空

How to check any pipe separated data is empty

我正在尝试实现这个但没有得到

我在文件中有以下数据

A|B|C|D
AX | GH | H
FG |HJJK | 
  | GHJ | 
AG |

我需要检查管道之间是否应该有数据

预期输出

Line 1 : as proper data 
Line 2 : as proper data 
Line 3 : No proper data 
Line 4 : No proper data 
Line 5 : No proper data 

我正在尝试为其构建代码

IFS=''
    while -r data
    do 
       var1=`echo "$data" | awk -F'|' '{print }'
       var2=`echo "$data" | awk -F'|' '{print }'
       var3=`echo "$data" | awk -F'|' '{print }'
       if [ ! -z $var1  ]  && [! -z $var2] && [! -z $var3]
       then
            echo "as poper data"
       else
            echo "No proper data"
       fi  
    done < file.txt

如何编写适用于任何数据文件的通用代码,如果它是管道分隔的数据。

退回我的代码,如果它们是 3 列,我需要创建 3 个 var 变量

只需 grep 查找行前的管道、行尾的管道或中间没有任何管道的管道。

if grep -q '^[[:blank:]]*|\||[[:blank:]]*$\||[[:blank:]]*|' file.txt; then
      echo "as poper data"
else
      echo "No proper data"
fi  
A|B|C|D
AX | GH | H
FG |HJJK | 
  | GHJ | 
AG |

————————————————————————

{m,g}awk '$-_=sprintf("Line %5.f : %s proper data",
                       NR, (!_)< NF ? "No" : "as")' \
                       FS='(^|[|])[ \t]*[|]|[|][ \t]*$'

————————————————————————

Line     1 : as proper data
Line     2 : as proper data
Line     3 : No proper data
Line     4 : No proper data
Line     5 : No proper data

————————————————————

带有退出代码的版本

{m,g}awk '!_<NF { exit !_ } !_' FS='(^|[|])[ \t]*[|]|[|][ \t]*$'

输出

A|B|C|D
AX | GH | H

退出代码

echo "$?"

1

更容易理解awk:

awk -F '|' '
{
   for (i=1; i<=NF; ++i)
      if ($i ~ /^[[:blank:]]*$/) {
         print "Line", NR, ": No proper data"
         next
      }
   print "Line", NR, ": as proper data"
}' file

Line 1 : as proper data
Line 2 : as proper data
Line 3 : No proper data
Line 4 : No proper data
Line 5 : No proper data