linux - 计算来自不同文件的 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
解决方案
如果没有分隔符是前两行的其他部分,您可以使用这个通用的 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 ...
这将输出计数不匹配的任何文件。
推荐阅读
- python-3.x - 尝试在opencv-python中“手动”将bgr图像转换为hsv
- php - 当 POST 字段为空时,将 NULL 插入外键
- c++ - 通过指针取消引用的函数调用语法
- bash - Bash exec 将输出写入日志文件并将 PID 写入单独的文件
- c# - C# 在 .NET Framework 4.6.1 中使用 Microsoft.Toolkit.Win32.UI.Controls - Web 浏览器控件升级
- clang - 如何使用 GNU 风格的多个属性
- python - Python - 根据前者的键值将字典的键作为键值附加到另一个中
- c# - 如何获取部分包含在给定矩形中的控件
- asp.net - 有没有办法将程序变量放入 gridview 的绑定字段值中?
- ssl - 一张图片的 Bigcommerce https 错误