檔案1.csv
col1,col2,col3
a,b,c
b,v,n
x,u,v
t,m,m
檔案2.csv
col1,col2,col3
p,m,n
a,z,i
col1充當兩個檔案中的主鍵。如果col1中file2.csv出現 的任何值file1.csv,則該行將從 中丟棄file1.csv。
輸出檔案:
col1,col2,col3
b,v,n
x,u,v
t,m,m
注意:我對Unix基于解決方案感興趣。請提供解決方案sort或uniqcmd 或其他任何內容。
uj5u.com熱心網友回復:
joinUnix 上有一個命令幾乎可以滿足您的要求:
join -v1 -t, \
<(tail 2 file1.txt | sort -k1 -t,) \
<(tail 2 file2.txt | sort -k1 -t,)
對于您提供的示例檔案,這是其輸出:
b,v,n
t,m,m
x,u,v
命令分解
join -v1 -t,-v1:通過連接列顯示第一個檔案中不能與第二個檔案中的行配對的行(用于連接的默認列是 1,但它可以通過-1和-2選項覆寫)-t,: 使用逗號作為欄位/列分隔符
<(tail 2 file1.txt | sort -k1 -t,)<( … ):join命令需要檔案名作為引數,所以我們使用行程替換從嵌套命令的輸出中創建這樣的臨時檔案tail 2 file1.txt: 跳過標題行sort -k1 -t,:join命令需要排序的檔案-t,: 使用逗號作為欄位/列分隔符-k1: 按第一個欄位排序
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/339887.html
上一篇:NiFi上的Python2.X:json.loads中的?(和其他)問題
下一篇:shell腳本中的標題列驗證
