linux脚本中的文件验证

linux脚本中的文件验证,linux,bash,Linux,Bash,我有一个文件,其中第一列包含标题(文件Id、value1\u Id、value1\u类型、value2\u Id、value2\u类型)。文件Id包含文件名,值\u Id包含文件值,值\u类型包含数据类型。我需要选择每个文件并检查数据类型,看看是否在value_id中输入了正确的数据类型值。我本可以用Python完成,但在Linux中是必需的,我尝试了下面的脚本,但这不是所需要的 当IFS=':'读取col1、col2、col3、col4 做 回声“col1”| grep“^[0-9]*$” v

我有一个文件,其中第一列包含标题(文件Id、value1\u Id、value1\u类型、value2\u Id、value2\u类型)。文件Id包含文件名,值\u Id包含文件值,值\u类型包含数据类型。我需要选择每个文件并检查数据类型,看看是否在value_id中输入了正确的数据类型值。我本可以用Python完成,但在Linux中是必需的,我尝试了下面的脚本,但这不是所需要的

当IFS=':'读取col1、col2、col3、col4
做
回声“col1”| grep“^[0-9]*$”
val=“$?”
如果[$val==0]]
然后
回显“整数”
出口
fi
echo$col2 | grep“^[a-zA-Z]*$”
val=“$?”
如果[$val==0]]
然后
回音“字符串”
出口
fi
完成

谁能帮我一个忙,我对linux脚本一无所知。

您在示例中使用了IFS=':',因此我假设字段之间用“:”符号分隔

假设我们有一个名为/root/file.ext的文件:

col1:col2:col3:col4
1:word:2:word2
word3:3:word4:4
其中第一行是标题

然后可以使用以下命令:

tail -n+2 /root/file.ext | awk -F: 'BEGIN{OFS=":"} {for (i=1;i<=NF;i++) {if ( match($i, /^[0-9]+$/) ) $i="integer"; else $i="string"} {print}}'

如果要在纯bash中执行此操作,请使用以下脚本:

#/bin/bash
读行时;做
行=(${line/[:]/})
对于“${!行[@]}”中的i;做
[!-z“${line[$i]##*[!0-9]*}]&&printf“integer”| | printf“string”
[“$i”-ne$(${line[@]}-1))&&printf:“| | echo”
完成
已完成<$1
将文件作为第一个参数传递

此脚本迭代文件中的所有行(
读取行时;do…done<$1
,其中
$1
是文件路径),然后用空格替换每行中的所有冒号(
${line/[:]/}
)。具有用空格分隔的值的变量可以被视为数组,这就是为什么此替换在括号中

现在我们可以迭代一行中的所有值。对于
数组中的每个索引,我们:

  • 检查它是否只包含数字。它是通过删除行中当前值的所有数字(
    ${line[$i]\\\\*[!0-9]*}
    ,其中
    行[$i]
    是当前值)然后检查它是否为空(
    !-z
    )。如果是,则打印
    整数
    ,否则打印
    字符串
  • 检查这是否不是数组中的最后一个元素。它是通过比较当前索引(
    $i
    )和减少1的数组长度(
    ${line[@]}
    )来完成的。如果当前索引不是最后一个,我们将打印
    。否则,我们打印新行
  • 这是对给定文件中的所有行执行的。给定具有以下内容的输入文件:

    col1:col2:col3:col4
    1:word:2:word2
    word3:3:word4:4
    
    我们得到以下结果:

    string:string:string:string
    integer:string:integer:string
    string:integer:string:integer
    

    Python也可用于Linux。首先请参阅。几乎所有现代Linux发行版都会默认安装python。请使用并修复它指出的所有语法问题。此外,您还应该提供一个示例,并具体描述代码的失败方式。
    这不是您需要的
    然后您需要什么?请具体说明:
    查看value\u id中是否输入了正确的数据类型值
    请定义“正确的数据类型值”?什么是“数据类型”?每种“数据类型”的“正确值”是什么?您的脚本
    读取col1、col2、col3、col4
    [[$val==0]]
    有许多问题-请使用检查脚本。无论如何都要使用
    awk
    string:string:string:string
    integer:string:integer:string
    string:integer:string:integer