linux脚本中的文件验证
我有一个文件,其中第一列包含标题(文件Id、value1\u Id、value1\u类型、value2\u Id、value2\u类型)。文件Id包含文件名,值\u Id包含文件值,值\u类型包含数据类型。我需要选择每个文件并检查数据类型,看看是否在value_id中输入了正确的数据类型值。我本可以用Python完成,但在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
当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