2017-02-22 5 views
0

Сравнить файл 1 vs File2 и номер печати. для записи различий и столбца нет разницы, присутствующей в файле2.Linux: как я могу напечатать номер строки и номер столбца, если значения не совпадают для разделенных разделов файлов с использованием AWK в linux

В file1:

User_ID First_name Last_name Address      Postal_code 
User_1 fistname  Lastname 35, Park Lake, California   32068  
user2  Johnny  Depp  32, Park Lake, California    
user3  Tom   Cruise  5322 Otter Lane Middleberge   32907  
user4  Leonardo  DiCaprio Half-Way Pond, Georgetown   1230  
user5  Sylvester  Stallone 6762,33 Ave N,St. Petersburg  33710 
user6  Srleo   Stallone 6762,33 Ave N,St. Petersburg  33700 

и

В file2:

User_ID First_name Last_name Address      Postal_code  
User_1 fistname  Lastname 35, Park Lake, California   32068  
user2  Johnny  Depp  32, NEW Street, California   96206  
user30 Tom   Cruise  5322 Otter Lane Middleberge   32907 
user4  Leonardo  DiCaprio' Half-Way Pond, Georgetown   00000  
user5  Sylvester  Stallone 6762,33 Ave N,St. Petersburg  33710 
user7  Nicolas  Cage           55010  
user6  Srleo   Stallone 6762,33 Ave N,St. Petersburg  33700 

** Ожидаемый результат: -

Разница в file2 является номер строки с последующим номер столбца (где Значения не совпадают) **

Line No. 2 COLUMN NO- 4,5  
Line No. 3 COLUMN NO-1  
Line No. 4 COLUMN NO 3,5  
Line No. 5 COLUNN NO 5  
Line No. 6 COLUMN NO 1,2,3,4,5 

Примечание: Размер файла будет сравнить в ГБ и Файл вкладки разделены и имеет более чем 400 вкладки разделены колонки.

Я using-

awk 'NR==FNR{Arr[$0]++;next}!($0 in Arr){print FNR}' file1 file2 

Однако, это дает мне номер строка, а не в столбце Число

+0

Как только вы найдете подходящую строку, вам нужно будет разделить и сравнить каждый столбец – grail

+0

Как мы можем это сделать в UNIX? Можете ли вы поделиться сценарием. @grail –

+0

Проверьте функцию разделения из руководства: - https://www.gnu.org/software/gawk/manual/html_node/String-Functions.html#String-Functions ... Затем просто используйте цикл for, где вы в настоящее время есть «print FNR» – grail

ответ

2

это следует делать, однако, не соответствует вашему ожидаемому результату

paste f1 f2 | 
awk -F'\t' 'NR==1 {n=NF/2} 
        {for(i=1;i<=n;i++) 
        if($i!=$(i+n)) 
         {c=c s i; s=","} 
        if(c) 
        {print "Line No. " NR-1 " COLUMN NO " c; 
         c="";s=""}}' 

Line No. 2 COLUMN NO 4,5 
Line No. 3 COLUMN NO 1 
Line No. 4 COLUMN NO 3,5 
Line No. 6 COLUMN NO 1,2,3,4,5 
Line No. 7 COLUMN NO 1,2,3,4,5 

либо вы не сравниваете строку за строкой, либо некоторые другие некоторые неписаные спецификации.

+0

@ Спасибо за закуску. Над логикой работает для меня. –

+0

Привет @ karakfa, выше логика игнорирует нулевые значения Т.Е., как мы можем напечатать номер столбца, где значение изменилось на нуль или наоборот Файл 1 ID60 Марк \t \t Вог Санкт-Петербург Файл 2 ID60 \t \t Марк Вог \t \t Санкт-Петербург 7777700000 ID70 \t СТИВ \t \t \t \t 8888800000 (то есть нулевые значения в цв. 3 и 4) Выход: линия № 2: 1,2,3 Ожидаемый результат: линия № 2: 1,2,3,4,5 пожалуйста, вы можете помочь мне для выше ожидаемого результата. –

+0

он будет сравнивать и нулевые поля. Количество полей задано в первой строке. Если у вас заголовок не равен нулю для всех столбцов, они будут сравниваться независимо от их значения. Однако полевые разделители (здесь вкладка) должны быть на месте, даже если поля отсутствуют.Кроме того, не отправляйте форматированный текст в комментариях, добавьте свой вопрос в новый тестовый пример. – karakfa

Смежные вопросы