我正在寻找一个方法(shell脚本),它将帮助我从以下格式的文件中识别缺失值(在一列中)。
Head1 | Head2 | Head3 | Head4 | Head5 | Head6 | Head7 | Head8 | Head9 | Head10 | Head11 | Head12 | Head13 |
15 | DRE-NCL | | | | | | 2 | USD | | | | 2 |
15 | HTBCL | | | | | | 2 | USD | | | | 2 |
问题:
答案 0 :(得分:0)
您可以轻松使用cut
命令。像:
cut -d'|' -f2 filename
这个打印第2个字段(使用| as delimiter)的所有行。您的文件输出是:
Head2
DRE-NCL
HTBCL
现在您可以将此提示用于您的问题。
答案 1 :(得分:0)
lineno=0
# read the file line-by-line,
# splitting each line (using pipe separator) into the "fields" array
while IFS='|' read -ra fields; do
((lineno++))
for idx in "${!fields[@]}"; do
# trim trailing spaces and compare to the empty string.
if [[ ${fields[idx]%% } == "" ]]; then
echo "line number $lineno has at least one empty field"
break
fi
done
done < filename
答案 2 :(得分:0)
lineno=0
while IFS='|' read -ra fields; do
((lineno++))
for idx in "${!fields[@]}"; do
if [[ ${fields[idx]%% } == "" ]]; then
echo "line number $lineno has at least one empty field"
break
fi
done
done < filename
"${!fields[@]}"
为您提供数组的 indices ,而不是元素。
${fields[idx]%% }
是一个参数扩展,它接受值并删除所有尾随空格。这里并不严格要求使用双引号,因为它位于bash的[[ ... ]]
从bash手册中,阅读: