スキーマ・ファイルは awk/sed/grep の RS および FS への入力として使用され、列を識別して追加します。

スキーマ・ファイルは awk/sed/grep の RS および FS への入力として使用され、列を識別して追加します。

特定のデータセットで検索し、データ列に数字を追加する必要があるパターンを含むファイルがあります。スクリプトを作成するか、awk/sed/grepを使用して特定のファイルにパターンを自動的に照会して、私が持っているデータと交差させ、一致するパターンを持つ列に数字を追加したいと思います。

例:-

データ

タイトル、数、RESA

10th ECOMF,PAB  1   MAT

10th ICOCPS (CPV-'10)   23  SCI

10th ICOCPS (CPV-'10)   6   SCI

10th ICOMAMOS (M2S-X)   3   EEE

JOP 32  COP

AIP 34  Sff

JOP 43  COP

HIT 42  tilde

私のスキーマファイルにジャーナル名が含まれています。

10th ECOMF,PAB

10th ICOCPS (CPV-'10)

10th ICOCPS (CPV-'10)

10th ICOMAMOS (M2S-X)

JOP

AIP

JOP

HIT

SUPERCONDUCTIVITY (M2S-X)

希望の出力:

10th ECOMF,PAB  1

10th ICOCPS (CPV-'10)   29

10th ICOMAMOS (M2S-X)   3

JOP 75

AIP 34

HIT 42

.

.

まもなく、

PS: - データはタブで区切られており、同じデータがCSVにあります。

答え1

アッ解決策:

awk 'BEGIN{ FS=OFS="\t" }
     NR==FNR{ if(NF && !($0 in b)) { a[++c]=$0; b[$0] } next }{ b[$1]+=$2 }
     END{ len=length(a); for(i=1;i<=len;i++) if(a[i] in b) print a[i],b[a[i]] }' patterns data

  • BEGIN{ FS=OFS="\t" }- フィールド区切り記号の設定

  • a[++c]=$0; b[$0]- ユニークなコレクション雑誌patternsファイル名

  • b[$1]+=$2- 各数字をまとめる雑誌dataファイル名

  • if(a[i] in b) print a[i],b[a[i]]- それぞれの合計値を追加します。雑誌patternファイル名

出力:

10th ECOMF,PAB  1
10th ICOCPS (CPV-'10)   29
10th ICOMAMOS (M2S-X)   3
JOP 75
AIP 34
HIT 42
...

関連情報