這似乎有一個簡單的解決方案,但我被卡住了。我想在密鑰檔案中查找主檔案的第二列,對于任何匹配的密鑰,只列印前兩列,其余的則列印整個記錄。我有一個作業腳本,但它會列印匹配鍵的整行。你能幫忙嗎?
awk 'FNR == NR {key[$1]; next} $2 in key {print $1,$2}' keyfile mainfile > outfile
主檔案:
PSHELL 10 136514 0.7
PSHELL 15 136514 0.7
PSHELL 20 136513 2.0
PSHELL 30 13571 1.7
密鑰檔案:
10
30
輸出檔案:
PSHELL 10
PSHELL 15 136514 0.7
PSHELL 20 136513 2.0
PSHELL 30
uj5u.com熱心網友回復:
你可以使用這個awk:
awk 'FNR == NR {key[$1]; next} {print ($2 in key ? $1 OFS $2 : $0)}' keyfile mainfile | column -t > outfile
cat outfile
PSHELL 10
PSHELL 15 136514 0.7
PSHELL 20 136513 2.0
PSHELL 30
這里:
$1 OFS $2當我們$2在key陣列中找到時使用三元運算列印,否則我們列印$0。- 用于
column -t表格輸出
uj5u.com熱心網友回復:
嘗試這個:
awk 'FNR == NR {key[$1]; next} $2 in key {print $1,$2;next} 1' keyfile mainfile
最后一個1表示一個空塊,其默認行為是列印整行。
并與next前面塊中的 結合,充當一種if else開關。
uj5u.com熱心網友回復:
這是執行相同操作的另一種方法。假設您不關心輸出行的順序,那么以下也可能對您有所幫助。
awk '
FNR==NR{
arr1[$2]=$1 OFS $2
arr2[$2]=$0
next
}
($1 in arr1){
print arr1[$1]
arr3[$1]
}
END{
for(key in arr2){
if(!(key in arr3)){
print arr2[key]
}
}
}
' mainfile keyfile
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/317380.html
上一篇:僅獲取最新檔案的全域路徑
