UNIX bash - Как сравнить значения из одного столбца?

У меня есть файл, в котором я бы хотел сравнить, если каждый набор из 4 значений из столбца 2 равен.

Это часть моего файла input.txt:

1 493733 2 493733 3 493733 4 493733 1 546328 2 546328 3 546328 4 546328

Мне нужен скрипт для сравнения значений в столбце 2 из первых 4 строк:

1 493733 2 493733 3 493733 4 493733

Затем перейдите к следующим 4 строкам (... до тех пор, пока длина файла не изменится ):

1 546328 2 546328 3 546328 4 546328

Число в столбце 2 должно быть одинаковым каждые 4 строки, но иногда есть другой, который мне нужно поймать.

Если числа совпадают , выводят какое-то сообщение. Если какой-либо из этих чисел не соответствует, выведите его в файл .log, который нужно проверить.

-1
задан 30 January 2018 в 19:53

2 ответа

Это должно сделать трюк:

file="input.txt" log_file="some.log" num_lines=$(wc -l < "$file") for i in `seq 0 $(bc<<<$num_lines/4)`; do FIRST_LINE=$(bc<<<"$i*4+1") SECOND_LINE=$(bc<<<"$i*4+2") if [ "$(awk NR==$FIRST_LINE "$file")" == "$(awk NR==$SECOND_LINE "$file")" ]; then echo "some kind of message" else echo "Lines $FIRST_LINE and $SECOND_LINE do not match" | tee -a "$log_file" fi done
0
ответ дан 17 July 2018 в 21:54

Это должно сделать трюк:

file="input.txt" log_file="some.log" num_lines=$(wc -l < "$file") for i in `seq 0 $(bc<<<$num_lines/4)`; do FIRST_LINE=$(bc<<<"$i*4+1") SECOND_LINE=$(bc<<<"$i*4+2") if [ "$(awk NR==$FIRST_LINE "$file")" == "$(awk NR==$SECOND_LINE "$file")" ]; then echo "some kind of message" else echo "Lines $FIRST_LINE and $SECOND_LINE do not match" | tee -a "$log_file" fi done
0
ответ дан 23 July 2018 в 22:31
  • 1
    Поскольку числа являются целыми числами, вы можете использовать математику Bash $((...)) вместо bc. – wjandrea 31 January 2018 в 04:06

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

Похожие вопросы: