Как сравнить количество строк двух файлов с помощью Awk

Я новичок в awk и мне нужно сравнить количество строк в двух файлах. Скрипт должен вернуть true,

if lines(f1) == (lines(f2)+1)

иначе ложно. Как я могу это сделать?

С наилучшими пожеланиями

2 ответа

Решение

Если это должно быть awk:

awk 'NR==FNR{x++} END{ if(x!=FNR){exit 1} }' file1 file2

Варибале x увеличивается и содержит номер строки file1 и FNR содержит количество file2, В конце оба сравниваются, и сценарий завершается 0 или 1.

Смотрите пример:

user@host:~$ awk 'NR==FNR{x++} END{ if(x!=FNR){exit 1} }' shortfile longfile
user@host:~$ echo $?
1
user@host:~$ awk 'NR==FNR{x++} END{ if(x!=FNR){exit 1} }' samefile samefile
user@host:~$ echo $?
0

Нечто подобное должно соответствовать вашим целям:

 [ oele3110 $] cat line_compare.awk
#!/usr/bin/gawk -f

NR==FNR{
    n_file1++;
}
NR!=FNR{
    n_file2++;
}

END{
    n_file2++;
    if(n_file1==n_file2){exit(1);}
}
 [ oele3110 $] cat f1
1
1
1
1
1
1
 [ oele3110 $] cat f2
1
1
1
1
1
 [ oele3110 $] cat f3
1
1
1
1
1
 [ oele3110 $]
 [ oele3110 $] wc -l f*
 6 f1
 5 f2
 5 f3
16 total
 [ oele3110 $] ./line_compare.awk f1 f2
 [ oele3110 $] echo $?
1
 [ oele3110 $] ./line_compare.awk  f2 f3
 [ oele3110 $] echo $?
0
 [ oele3110 $]

На самом деле, я думаю, я должен был попросить вас приложить немного больше усилий, прежде чем дать вам ответ. Я оставлю это сейчас, но в следующий раз я не сделаю ту же ошибку.

Другие вопросы по тегам