首页 > 解决方案 > 计算来自不同文件的 3 种分隔符(逗号、分号、管道)

问题描述

我正在尝试开发类似的东西。但我的要求有点不同。我想计算第一行和第二行的分隔符数量。如果两行的分隔符匹配,则很好,否则需要将文件移动到拒绝文件夹。下面是脚本。但是在这里我有一个问题,我如何计算不同文件中的 3 个不同的分隔符。例如,我有逗号、分号和管道分隔符。在 sed 命令的以下脚本中,如何同时检查 3 种类型的分隔符?

pathname=/opt/interfaces/sample_check/mvfiles/inbox

findresult=$(find $pathname -type f ( -name "messagemulti.csv" -or -name "messagesemi.txt" -or -name "comma2.txt" -or -name "messagepipe.txt" -or -name "tokkalodi.txt" -or -name "ADMC_POSITION-LT3213.csv" -or -name "DMC_CASHFLOW248.csv" -or -name "ADMC_EQBASKET-WEIGHTS_52387.csv" -or -name "ADMC_POSITION-DDD7.csv" -or -name "ADMC_POSITION-DDD7.csv" ))

Count=sed -n 1p $findresult | tr ',' '\n' | wc -l
Count2=sed -n 2p $findresult | tr ',' '\n' | wc -l

echo $Count echo $Count2

if [ $Count != $Count2 ]
then echo "Mis Match"
  mv $findresult /opt/interfaces/sample_check/mvfiles/reject
else echo "Match"
  exit
fi

标签: linuxshellperlunixsed

解决方案


如果没有分隔符是前两行的其他部分,您可以使用这个通用的 GNU awk 脚本:

解析.awk

BEGIN  { FS="[,;|]" }            # Set Field Separators
FNR==1 { count = NF }            # Remember Number of Fields from the first line
FNR==2 { 
  if(count != NF)                # If second line has the same number of fields
    print "Mismatch: " FILENAME  # Report the mismatched file
  nextfile                       # Skip to next input file
}

像这样运行它:

awk -f parse.awk infile1 infile2 ...

这将输出计数不匹配的任何文件。


推荐阅读