как сравнить текущую строку со следующей строкой в ​​csv и отобразить разницу столбцов в сценариях unix

Да, gitсъел мою домашнюю работу. Все это.

Я сделал ddобраз этого диска после инцидента и позже возился с ним. Реконструируя серию событий из системных журналов, я делаю вывод, что произошло что-то вроде этого:

  1. Команда обновления системы(pacman -Syu)была отправлена ​​за несколько дней до этого инцидента.
  2. Длительное отключение сети означало, что -она осталась -при попытке загрузить пакеты. Разочарованный отсутствием интернета, я усыплял систему и ложился спать.
  3. Несколько дней спустя система проснулась и снова начала находить и скачивать пакеты.
  4. Загрузка пакета завершилась как раз перед тем, как я начал возиться с этим репозиторием.
  5. Установка системы glibc была обновлена ​​после git checkoutи до git pull.
  6. Двоичный файл gitбыл заменен после запуска git pullи до его завершения.
  7. И в седьмой день, gitотдыхал от всех своих трудов. И удалил мир, чтобы всем остальным тоже пришлось отдыхать.

Я не знаю точно какое состояние гонки привело к тому, что это произошло,но замена двоичных файлов в середине операции, безусловно, нехороша и не является проверяемым/повторяемым условием. Обычно копия исполняемого бинарника хранится в памяти, но gitэто странно, и что-то в том, как он -порождает свои версии, я уверен, привело к этому беспорядку. Очевидно, он должен был умереть, а не уничтожить все, но так и случилось.

-3
24.07.2020, 14:52
1 ответ
$ cat tst.awk
BEGIN { FS="," }
NR > 1 {
    if (p[0] != $0) {
        printf "\nLine %d (%s) != %d (%s)\n", NR-1, p[0], NR, $0
    }
    for (i=1; i<=NF; i++) {
        if (p[i] != $i) {
            printf "\tField %d.%d (%s) != %d.%d (%s)\n", NR-1, i, p[i], NR, i, $i
        }
    }
}
{ split($0,p); p[0]=$0 }

.

$ awk -f tst.awk file.csv

Line 1 (ABC,EFG,22) != 2 (XYZ,MNO,24)
        Field 1.1 (ABC) != 2.1 (XYZ)
        Field 1.2 (EFG) != 2.2 (MNO)
        Field 1.3 (22) != 2.3 (24)

Line 2 (XYZ,MNO,24) != 3 (XYZ,MNO,228)
        Field 2.3 (24) != 3.3 (228)

Line 3 (XYZ,MNO,228) != 4 (SPOT,ID,NUMBER)
        Field 3.1 (XYZ) != 4.1 (SPOT)
        Field 3.2 (MNO) != 4.2 (ID)
        Field 3.3 (228) != 4.3 (NUMBER)

Line 4 (SPOT,ID,NUMBER) != 5 (SPOT,ID,VARCHAR2)
        Field 4.3 (NUMBER) != 5.3 (VARCHAR2)

Line 5 (SPOT,ID,VARCHAR2) != 6 (INF,SUMMARY,VARCHAR2)
        Field 5.1 (SPOT) != 6.1 (INF)
        Field 5.2 (ID) != 6.2 (SUMMARY)

Line 6 (INF,SUMMARY,VARCHAR2) != 7 (INF,SUMMARY,NUMBER)
        Field 6.3 (VARCHAR2) != 7.3 (NUMBER)
0
18.03.2021, 23:17

Теги

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