File1:
X
X
P
X
N
X
Q
File2:
P 1
N 5
Q 0
Desired output:
X 0
X 0
P 1
X 0
N 5
X 0
Q 0
私はbashでmergeコマンドを使用するためにいくつかの方法を試しました。私はそれを動作させることはできません。
ベストアンサー1
Awk
とても簡単にできます!
awk 'FNR==NR{ hash[$1]=$2; next}{ if ($0 in hash) $2 = hash[$1]; else $2 = "0" }1' file2 file1
Awk
入力ラインを処理して動作します。一つ一度。ファイル処理の前後に実行するタスクをAwk
提供しBEGIN{}
、含む特別な句もあります。END{}
ファイル内の各行はFS
特殊変数(デフォルトでは1つ以上の空白)値に基づいて分割され、これらの個々のフィールド$1
には..から$2
アクセスできます。$NF
したがって、このセクションは結合されたファイルと現在のファイルの行番号を追跡するため、FNR==NR
コマンドに指定された最初のファイル引数を処理するように設計されています。したがって、最初のファイルの各値に対して、その値はという配列にハッシュされ、FNR
NR
$1
hash
次ファイル処理が発生すると、このセクションでは$0 in hash
その行をハッシュインデックス位置にマッピングします。そのようなマッピングされた行の場合はその行を印刷し、マッピングされていない行の場合は印刷します。file1
file2
0
これは、個々のフィールドまたは上記の特殊変数に対する変更に基づいて行全体をデフォルトで再構築/印刷する{..}1
簡単な表現です。{..; print}
もっと見るawkの組み込み変数の制御