다른 파일에 있는 열의 패턴을 사용하여 파일에서 값을 추출하고 이 값을 후자에 새 열로 삽입하려면 어떻게 해야 합니까?

다른 파일에 있는 열의 패턴을 사용하여 파일에서 값을 추출하고 이 값을 후자에 새 열로 삽입하려면 어떻게 해야 합니까?

나는 "승리"한 60장의 게임 카드를 샘플링했습니다.이것그리고 카드를 뽑아요이름그리고계산일부 소프트웨어에서 사용할 수 있도록 포맷합니다. 산출체재예:

.<ID><탭>계산<탭>이름

1 단계

나는 다음을 사용하여 에피소드의 텍스트 버전으로 시작했습니다.협회페이지(옆)에서 확인 가능인쇄) 데이터(공백으로 구분된 두 개의 열)를 유지하고 삭제합니다.찬장카드.

2 단계

각 카드 이름에 대해 세미콜론으로 구분된 카드 속성 목록이 포함된 로컬 파일을 검색 list하고 두 번째 필드의 카드 이름과 일치하여 첫 번째 필드를 추출합니다.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파일을 처음 두 값(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 번호모든 이름 검색이 존재합니다. 그렇지 않으면 제대로 작동하지 않습니다. 물론 이 작업을 수행하는 더 우아한 방법이 있지만 이 경우에는 효과적입니다!

관련 정보