別のファイル内の列のパターンを使用してファイルから値を抽出し、この値を後者に新しい列として挿入するにはどうすればよいですか?

別のファイル内の列のパターンを使用してファイルから値を抽出し、この値を後者に新しい列として挿入するにはどうすればよいですか?

私は「勝利」した60枚のゲームカードをサンプリングしました。これそしてカードを引きます。名前そして計算一部のソフトウェアで使用できるようにフォーマットします。出力滞在例:

.<ID><タブ>計算<タブ>名前

ステップ1

私は以下を使用してエピソードのテキストバージョンから始めました。協会ページ(横)で確認可能印刷)データ(スペースで区切られた2つの列)を保持して削除します。食器棚カード。

ステップ2

各カード名に対してセミコロンで区切られたカード属性のリストを含むローカルファイルを検索し、list2番目のフィールドのカード名と一致して最初のフィールドを抽出します。ID番号そのカードの場合(最初のフィールドのみが重要なので、ここでは行数を減らしました):

ID;Full Name;...
0;Air Elemental;1;Air Elemental;0800h;;;;;;;
1;Ancestral Recall;1;Ancestral Recall;0800h;;;;;;;;
2;Animate Artifact;1;Animate Artifact;0800h;;;;;;;
...    
10780;Jace, the Mind Sculptor;1;Jace, the Mind Sculptor;0008h;;;;;;;;
10871;Aura Finesse;0;Aura Finesse;0008h;;;;;;;

...その後、各行の前に次を付けます。ステップ1そして。 ID、3つの列がテーブルで区切られていることを確認してください。決勝出力ファイルは次のとおりです(ヘッダー部分は気にしません)。

;MY1 - Shardless BUG - #1
;
;User
;User E-Mail
;28/08/2014
;1
;4th Edition
;

.12516  2   Baleful Strix
.12533  4   Shardless Agent
.12700  4   Deathrite Shaman
.9038   4   Tarmogoyf
.10780  2   Jace, the Mind Sculptor
.12004  2   Liliana of the Veil
.12     2   Bayou
.10747  2   Creeping Tar Pit
.12645  4   Abrupt Decay
.1547   4   Brainstorm
.2285   3   Force of Will
.1456   1   Hymn to Tourach
.13650  1   Toxic Deluge
.9286   3   Thoughtseize
.239    1   Swamp
.1486   4   Polluted Delta
.258    3   Underground Sea
.10706  4   Verdant Catacombs
.3329   2   Wasteland
.1      4   Ancestral Recall
.10612  2   Misty Rainforest
.252    2   Tropical Island

上記のソースを考えるとテキストファイルとlistファイル、必要な出力ファイルを生成する方法滞在

答え1

だから私がしたのは、listファイルを最初の2つの値(ID;名前)に切り取り、ソーステキストにこのスクリプトを使用することでした。文書:

#!/usr/bin/env bash

dos2unix "$1"
sed -e '/Sideboard/,$d' "$1" -e '/^$/,$d' | tee source_strip | cut -d ' ' -f 2- >temp
while IFS= read f; do
  sed -n "s/\([0-9]*\);$f$/\.\1/p" list
done <temp >IDs
sed -ni 's/^\([0-9]*\) \([a-zA-Z]*\)/\1\t\2/p' source_strip
paste IDs source_strip > final
cat final

もちろん、これは次のことを前提としています。ID番号すべての名前検索が存在します。それ以外の場合は正常に動作しません。もちろん、これを行うよりエレガントな方法がありますが、この場合は効果的です!

関連情報