2013-06-01 7 views
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 
+0

Почему вы используете 'ps' ? Вы просто хотите запустить 'grep check.txt | wc -l' – Barmar

+0

P.S. Используйте инструмент '{}' SO для форматирования кода, не отформатируйте его как HTML. – Barmar

+0

В чем вопрос? –

ответ

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 ]; 

Это позволит проверить, если файл имеет ненулевое значение длина.

+0

Благодаря этой работе мой файл включает заголовок, поэтому -gt 1 –

+0

Если он работает, вы должны принять ответ. – Barmar

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 
Смежные вопросы