열이 다른 두 개의 파일이 있습니다.
File1
:
pears are fruits
apple is fruit
carrot is veg
celery is vegetable
oranges are fruits
File2
:
fruits apple mycode is #q123c# for apple
fruits pears my code is #q432c# for juicy
veg celery my code value is #q989c# for vegetables
veg spinach code is #q783c# and is a type of vegetable
fruits papaya i have code #q346c#
vegie lettuce code #q445c# is vege
이상적인 출력 파일이 필요합니다:
Q432C pears fruits
Q123C apple fruit
Q---C carrot veg
Q989C celery vegetable
Q---C oranges fruits
File1의 열 1은 File1의 열 2와 비교되어야 합니다 File2
. 일치하는 것이 있으면 두 개의 # 필드 내에 q-to-c 코드를 인쇄하고 File2
, 그렇지 않으면 빈 코드를 인쇄합니다 q---c
. QC 코드를 대문자로 변환합니다.
나는 출력이 File1
.
이상적으로는 출력 파일에 q-to-c 코드가 포함된 다음 File2
이를 추가해야 합니다. 그러나 지금은 일치하는 줄에서 q-to-c 코드를 제거하고 대문자로 만드는 File1
방법을 알아냈습니다 .File2
awk 'NR==FNR { a[$1]=1; next } ($2 in a) {print $0} ' File1 File2 | sed -e 's/.*#\(.*\)#.*/\1/' | tr [a-z] [A-Z] > outputFile
...누구 도와줄 수 있나요? 저는 awk
스크립팅이 처음입니다.
위의 결과를 얻은 후 연결하려고 했지만 생성한 출력 파일에 I 의 줄 수가 없기 때문에 올바른 q-to-c 코드를 올바른 줄에 연결하지 못할 위험이 있습니다 File1
.
다른 솔루션을 나누는 것을 기꺼이 받아들입니다 awk
.
누구든지 도울 수 있다면 매우 감사하겠습니다. :)
미리 감사드립니다.
답변1
싱글로awk
주문하다:
awk 'NR == FNR{
match($0, /#q[0-9]{3}c#/);
fruits[$2] = substr($0, RSTART + 1, RLENGTH - 2);
next
}
{ print ($1 in fruits? toupper(fruits[$1]) : "Q---C"), $1, $3 }' file2 file1
산출:
Q432C pears fruits
Q123C apple fruit
Q---C carrot veg
Q989C celery vegetable
Q---C oranges fruits