用于标识文件中缺失值的Shell脚本

时间:2014-04-22 16:16:54

标签: linux shell unix

我正在寻找一个方法(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 |

问题:

  1. 如何逐行阅读文件?
  2. 如何剖析线并存储在数组中?
  3. 找到空单元格或缺少值的任何其他想法?

3 个答案:

答案 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手册中,阅读: