複数のファイルからの入力を処理するためにAWKを使用する
2023-12-09 16:51:50
質問
複数の入力ファイルを一度にAWKするために、多くの人が以下の解決策を投稿してくれてとても助かっています。
$ awk 'FNR==NR{a[$1]=$2 FS $3;next}{ print $0, a[$1]}' file2 file1
これはうまく動作しますが、誰かが私に理由を説明してくれるでしょうか? 私はAWKの構文を理解するのが少し難しいと感じており、誰かが私のためにコードスニペットを分解することを気にしないだろうと期待していました。
どのように解決するのですか?
awk 'FNR==NR{a[$1]=$2 FS $3;next}
ここでは1番目の入力(file2)を処理します。FSがスペースであるとすると、配列を構築します(
a
) を作り、インデックスをカラム1、値を
column2 " " column3
である。
FNR==NR and next
は、この部分がfile2に対してのみ動作することを意味します。
{ print $0, a[$1]}' file2 file1
いつ
NR != FNR
ここでは、file1 の行を表示し、column1 をインデックスとして、array(a) print で値を求めています。
NRとFNRについて、簡単に説明します。
1st input has 5 lines
2nd input has 10 lines,
NR would be 1,2,3...15
FNR would be 1...5 then 1...10
のトリックが見えますね。
FNR==NR
をチェックします。
関連
-
[解決済み] bashと正規表現を使って1行でプロセスを検索してkillする
-
[解決済み] awk を使って n 番目から最後までのすべての列を表示する
-
[解決済み】awk で複数のデリミタを使用する場合
-
[解決済み] 最初のフィールド以外を awk で印刷する
-
[解決済み] 最初の3列を除くすべての列を印刷する
-
[解決済み] AWKを学ぶ理由はまだあるのでしょうか?
-
[解決済み] grepの出力にファイル名と行番号を表示する
-
[解決済み] awk におけるタブ区切りの値
-
[解決済み] 部分的に文字列が一致する場合(列や単語が部分的に一致する場合)。
-
[解決済み] awk - 2つの文字列変数を連結し、3番目の変数に代入する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン