如何使用另一个文件中的列中的模式从文件中提取值,并将这些值作为新列插入到后者中?

如何使用另一个文件中的列中的模式从文件中提取值,并将这些值作为新列插入到后者中?

我对“获胜”的 60 张游戏卡进行了采样,例如这个并提取卡名字数数并将其格式化以供某些软件使用。输出格式是:

.<ID><选项卡>数数<选项卡>姓名

步骤1

我从该集的文本版本开始,使用关联页面上提供(旁边打印)并保留数据(用空格分隔的两列),删除餐边柜牌。

第2步

对于每个卡名,我都会搜索本地list文件,其中包含以分号分隔的卡属性列表,并匹配第二个字段上的卡名称以提取第一个字段,即身份证号对于相应的卡(此处缩短了行数,因为只有第一个字段很重要):

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文件修剪为前两个值(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

当然,这假设一个身份证号每个名称搜索都存在,否则将无法正常工作。当然有更优雅的方法来做到这一点,但在这种情况下它确实有效!

相关内容