检查列是不是包含有效值

Posted

技术标签:

【中文标题】检查列是不是包含有效值【英文标题】:Check if column contains valid values检查列是否包含有效值 【发布时间】:2013-05-28 00:14:37 【问题描述】:

我有一个包含多列的制表符分隔文件。 我需要检查特定列是否包含有效值。 例如第 13 列的值应该只有 1,2,3,97

awk -F"\t" ' if ($13!=1&&$13!=2&&$13!=3&&$13!=97) print $0' test-data.txt > check.txt
if [ $( ps -ef | grep check.txt | wc -l ) -gt "1" ];
then
    upload_ok="no"
    echo "failed"
else
    echo "pass"
fi

【问题讨论】:

你为什么要运行ps?你只想运行grep check.txt | wc -l P.S.请使用 SO 的 工具来格式化您的代码,不要将其格式化为 html 你的问题是什么? 【参考方案1】:
if [ $( ps -ef | grep check.txt | wc -l ) -gt "1" ];

应该是:

if [ $( wc -l < check.txt ) -gt "1" ];

使用ps -ef 没有意义,那是为了检查正在运行的进程,这与您的应用程序无关。而且您不需要grep,因为您没有在文件中搜索任何内容——您只想知道它有多少行,这就是wc -l 返回的内容。

我对@9​​87654326@ 有点不确定。这意味着您允许文件有一个无效行;如果至少有 2 行不符合第 13 列的条件,则仅报告 failed。如果实际上不应该有这样的行,请更改为:

if [ -s check.txt ];

这会测试文件是否具有非零长度。

【讨论】:

【参考方案2】:

你没有说你的问题是什么,所以我不知道这是否回答了它,但检查一个字段(13 美元)是否是一组有效值的成员的最可靠、可扩展的方法( awk 中的 1、2、3 或 97) 只是按照您描述的方式对其进行编码,例如:

awk -F'\t' '
BEGIN split("1,2,3,97",tmp,/,/); for (i in tmp) valid[tmp[i]] 
!($13 in valid)
' test-data.txt

代替:

awk -F"\t" ' if ($13!=1&&$13!=2&&$13!=3&&$13!=97) print $0' test-data.txt

【讨论】:

以上是关于检查列是不是包含有效值的主要内容,如果未能解决你的问题,请参考以下文章

检查数组是不是包含Java中的值的最有效方法? [复制]

在 C# 中以编程方式检查字符串是不是包含有效的 C# 代码

检查字符串是不是是十六进制数的有效表示

找不到 tools.jar。请检查 C:\Program Files\Java\jre1.8.0_151 是不是包含有效的 JDK 安装

如何检查字符串是不是是有效的十六进制颜色表示?

检查图像是不是有效(损坏)javaCV