Bash 检查列是否包含有效值

Bash 检查列是否包含有效值,bash,awk,grep,Bash,Awk,Grep,我有一个由多个列组成的制表符分隔的文件。 我需要检查特定列是否包含有效值。 e、 g.第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="n

我有一个由多个列组成的制表符分隔的文件。 我需要检查特定列是否包含有效值。 e、 g.第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
应该是:

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

这将测试文件的长度是否为非零。

您没有说明您的问题是什么,因此我不知道这是否回答了问题,但检查字段($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

为什么要运行
ps
?您只需要运行
grep check.txt | wc-l
P.S。请使用SO的
{}
工具格式化您的代码,不要将其格式化为HTML。您的问题是什么?
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