簡體   English   中英

通過比較列中的值(使用awk)打印CSV文件中的差異

[英]Print differences in CSV files by comparing values in column (using awk)

假設我有2個文件 - file1.csvfile2.csv 我需要比較兩個文件的第2列(字符串值)並打印出file2.csv的行,以file2.csv第3列中不存在的第3列的file1.csv

我嘗試過使用以下awk命令:

awk -F'\t''NR==FNR{c[$3]++;next};c[$3] == 0' file1.csv file2.csv

然而, file2.csv給了我所有的file2.csv file2.csv中只有2個額外的行,不存在於file1.csv

有人能告訴我它是做錯了嗎?

file1.csv片段(列從0開始編號)

ANR     26545   CallExpression                  mutex_unlock ( & mmc_test_lock )
ANR     26546   Callee                          mutex_unlock
ANR     26547   Identifier                      mutex_unlock
ANR     26548   ArgumentList                    & mmc_test_lock
ANR     26549   Argument                        & mmc_test_lock
ANR     26550   UnaryOperationExpression        & mmc_test_lock
ANR     26551   UnaryOperator                   &
ANR     26552   Identifier                      mmc_test_lock
ANR     26553   ExpressionStatement             "__free_pages ( test -> highmem , BUFFER_ORDER )"
ANR     26554   CallExpression                  "__free_pages ( test -> highmem , BUFFER_ORDER )" 
ANR     26555   Callee                          __free_pages 
ANR     26556   Identifier                      __free_pages
ANR     26557   ArgumentList                    test -> highmem
ANR     26558   Argument                        test -> highmem 
ANR     26559   PtrMemberAccess                 test -> highmem
ANR     26560   Identifier                      test
ANR     26561   Identifier                      highmem
ANR     26562   Argument                        BUFFER_ORDER
ANR     26563   Identifier                      BUFFER_ORDER 

file2.csv片段

ANR     12910   CallExpression                  mutex_unlock ( & mmc_test_lock )
ANR     12911   Callee                          mutex_unlock
ANR     12912   Identifier                      mutex_unlock
ANR     12913   ArgumentList                    & mmc_test_lock
ANR     12914   Argument                        & mmc_test_lock
ANR     12915   UnaryOperationExpression        & mmc_test_lock
ANR     12916   UnaryOperator                   & 
ANR     12917   Identifier                      mmc_test_lock 
ANR     12918   IfStatement                     if ( test -> highmem )
ANR     12919   Condition                       test -> highmem 
ANR     12920   PtrMemberAccess                 test -> highmem
ANR     12921   Identifier                      test
ANR     12922   Identifier                      highmem
ANR     12923   ExpressionStatement             "__free_pages ( test -> highmem , BUFFER_ORDER )"
ANR     12924   CallExpression                  "__free_pages ( test -> highmem , BUFFER_ORDER )" 
ANR     12925   Callee                          __free_pages
ANR     12926   Identifier                      __free_pages
ANR     12927   ArgumentList                    test -> highmem
ANR     12928   Argument                        test -> highmem
ANR     12929   PtrMemberAccess                 test -> highmem
ANR     12930   Identifier                      test
ANR     12931   Identifier                      highmem
ANR     12932   Argument                        BUFFER_ORDER
ANR     12933   Identifier                      BUFFER_ORDER

預期產量:

ANR     12918   IfStatement     if ( test -> highmem )
ANR     12919   Condition       test -> highmem 

您需要將awk命令更改為:

awk -F'\t' 'NR==FNR {seen[$2]; next} !($2 in seen)' file1.csv file2.csv

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM