我正在嘗試實作這一點但沒有得到
我在檔案中有以下資料
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 $1}'
var2=`echo "$data" | awk -F'|' '{print $2}'
var3=`echo "$data" | awk -F'|' '{print $3}'
if [ ! -z $var1 ] && [! -z $var2] && [! -z $var3]
then
echo "as poper data"
else
echo "No proper data"
fi
done < file.txt
如何撰寫通用代碼,如果它作為管道分隔資料,它應該適用于任何資料檔案。
撤回我的代碼,如果它們是 3 列,我需要創建 3 個 var 變數
uj5u.com熱心網友回復:
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
uj5u.com熱心網友回復:
只需 grep 查找線路前面的管道、線路末端的管道或中間沒有任何內容的管道。
if grep -q '^[[:blank:]]*|\||[[:blank:]]*$\||[[:blank:]]*|' file.txt; then
echo "as poper data"
else
echo "No proper data"
fi
uj5u.com熱心網友回復:
更容易理解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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/482067.html
