如何检查任何管道分隔的数据是否为空
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
我正在尝试实现这个但没有得到
我在文件中有以下数据
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