![다른 파일에 있는 열의 패턴을 사용하여 파일에서 값을 추출하고 이 값을 후자에 새 열로 삽입하려면 어떻게 해야 합니까?](https://linux55.com/image/54948/%EB%8B%A4%EB%A5%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%9E%88%EB%8A%94%20%EC%97%B4%EC%9D%98%20%ED%8C%A8%ED%84%B4%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EA%B0%92%EC%9D%84%20%EC%B6%94%EC%B6%9C%ED%95%98%EA%B3%A0%20%EC%9D%B4%20%EA%B0%92%EC%9D%84%20%ED%9B%84%EC%9E%90%EC%97%90%20%EC%83%88%20%EC%97%B4%EB%A1%9C%20%EC%82%BD%EC%9E%85%ED%95%98%EB%A0%A4%EB%A9%B4%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%ED%95%B4%EC%95%BC%20%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
나는 "승리"한 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 번호모든 이름 검색이 존재합니다. 그렇지 않으면 제대로 작동하지 않습니다. 물론 이 작업을 수행하는 더 우아한 방법이 있지만 이 경우에는 효과적입니다!