Intereting Posts
scp не выполняет .ssh / config Может ли Linux надежно работать с SD-карты? Передача аргумента нескольким командам в одной строке Как эффективно создавать спектрограмму многих аудиофайлов с помощью Sox? Шелл Шрифт над SSH Как удалить неисправный менеджер рабочего стола из Arch Linux Используя wget или другую команду, как скачать сейчас, но конвертировать ссылки позже? Печать строки между двумя круглыми скобками Разрешить удаление sudo для удаленного пользователя для цели восстановления. Последствия для безопасности? Как определить, является ли процесс интенсивным сетевым вводом-выводом или нет в пользовательском режиме в Linux? Как остановить sudo PAM-сообщения в auth.log для определенного пользователя на Ubuntu 16.04? Могу ли я сжать сжатый файл? иногда команды истории не хранятся в .bash_history Ожидайте сценарий в коде bash & exit Сделать vim открытыми файлами как номодифицируемые, при определенных условиях

сравнить два файла, игнорируя 1-й столбец и номер строки печати

как я могу напечатать номер разности строк, игнорируя 1-й столбец для разделенных разделов файлов?

example-compare File 1 vs File2, игнорируя первый столбец и строку печати. для differnce запись присутствует в файле 2.

В файле1:

user1 fistname Lastnamename user2 Johnny Depp user3 Tom Cruise user4 Leonardo DiCaprio user5 Sylvester Stallone 

а также

В файле2:

 user10 fistname Lastnamename user2 Johnny Depp user30 Tom' Cruise user4 Nicolas Cage user50 Sylvester Stallone 

ожидаемый результат: – разница в файле2 для номера строки 3,4

Размер файла примечаний, который нужно сравнить, находится в GB, а файл разделен на вкладку

Попробуйте с этим кодом, не знаете, будет ли это работать, поскольку у меня недостаточно данных:

 diff --unchanged-line-format="" --old-line-format="" --new-line-format=":%dn: %L" file1 file2 | sed 1d | cut -d':' -f2 |tr '\n' ','|sed 's/,$//g' 

Это может ответить на ваш вопрос:

 awk 'NR==FNR{++a[$2,$3];next} {line++;if(!(a[$2,$3])){print line}}' record1 record2 

Объяснение:

 FNR==NR 

Когда у вас есть два (или более) входных файла для awk , FNR вернется к 1 в первой строке следующего файла, тогда как NR будет продолжать увеличиваться с того места, где он был остановлен. FNR==NR мы по существу проверяем, выполняем ли мы в данный момент первый файл.

 ++a[$2,$3] 

Если мы разберем первый файл (см. Выше), создайте ассоциативный массив с первым полем $ 2 и вторым полем $ 3, так как ключ и пост увеличивают значение на 1. Это существенно позволяет нам создать список «замеченных».

 next 

Эта команда говорит awk не обрабатывать дальнейшие команды и читать в следующей записи и начинать заново. Мы делаем это, потому что file1 предназначен только для установки ассоциативного массива

 !(a[$2,$3]) 

Эта строка выполняется только тогда, когда FNR == NR является ложным, то есть мы не разбираем файл1 и, следовательно, должны анализировать файл2. Затем мы используем первое поле $ 1 и второе поле $ 2 файла file2 как ключ к индексу в наш 'замеченный' список, созданный ранее. Если возвращаемое значение равно 0, это означает, что мы не видели его в файле1, и поэтому мы должны напечатать эту строку. И наоборот, если значение отличное от нуля, мы видели его в файле1, и поэтому мы не должны печатать его значение. Обратите внимание, что! (A [$ 2, $ 3]) эквивалентно! (A [$ 2, $ 3]) {print}, потому что действие по умолчанию, когда оно не указано, – это печать всей строки.

Вы можете использовать команду diff вместе с разрезом, чтобы найти разницу в двух файлах.

 diff <(cut -f2 -d$'\t' file1) <(cut -f2 -d$'\t' file2) 

Выход будет

 3,4c3,4 < Tom < Leonardo --- > Tom' > Nicolas 

Если вы относитесь к более повторяющимся записям, вы можете использовать вышеприведенную команду с sort -u для удаления дубликата, прежде чем искать diff из другого файла. Команда будет

 diff <(cut -f2 -d$'\t' file1|sort -u) <(cut -f2 -d$'\t' file2|sort -u) 
 $ echo -n 'difference in file2 is for line number ';diff --unchanged-line-format="" --old-line-format="" --new-line-format="%dn " <(tail +2 file1|unexpand -a|cut -f2-) <(tail +2 file2|unexpand -a|cut -f2-)|grep -o "[0-9]*" | while read i;do echo $((i+1));done|paste -sd, difference in file2 is for line number 3,4