다음 정보를 어떻게 처리해야 하는지 알고 싶습니다.
mapping.txt
:
80 001 002
81 011 012 013 014
82 021 022
...
input.txt
:
81 103823044
80 103823054
81 103823064
...
예상하다 output.txt
:
103823044|011|
103823044|012|
103823044|013|
103823044|014|
103823054|001|
103823054|002|
103823064|011|
103823064|012|
103823064|013|
103823064|014|
열 번호가 고정된 간단한 매핑을 수행했지만 동적 열 번호를 원하는 출력에 매핑하는 방법을 잘 모르겠습니다.
답변1
다음을 시도해 볼 수 있습니다.
awk 'NR == FNR { x[$1,$2] = $1; next; } { for (i in x) { if (x[i] == $1) { split(i,t,SUBSEP); for (z = 2; z <= NF; z++) { print t[2] "|" $z "|"; } } } }' input.txt mapping.txt
파일을 읽을 때 첫 번째 블록이 실행됩니다 input.txt
. 이는 첫 번째 파일을 읽을 때의 조건을 통해 NR == FNR
달성 됩니다. 첫 번째 블록에서는 첫 번째와 두 번째 열의 키와 첫 번째 열의 값으로 true
배열을 만듭니다 . 첫 번째 블록에 있으므로 두 번째 블록이 파일에서 실행됩니다. 두 번째 블록에서는 첫 번째 열의 값이 배열의 값으로 존재하는지 배열의 각 키를 확인하고 , 그렇다면 키의 두 번째 부분을 추출한 다음 값의 값과 함께 루프에서 해당 값을 인쇄합니다. 두 번째 열부터 마지막 열까지( -현재 레코드의 필드 수).x
mapping.txt
next
x
x
split
NF