2

我有一个包含多列的制表符分隔文件。我需要检查特定列是否包含有效值。例如第 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
4

2 回答 2

0
if [ $( ps -ef | grep check.txt | wc -l ) -gt "1" ];

应该:

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

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

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

if [ -s check.txt ];

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

于 2013-06-01T06:25:27.603 回答
0

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

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
于 2013-06-02T11:54:41.223 回答