Awk - 관계형 처리. 열에 대한 편집 내용은 실제 행의 세 번째 열에 지정된 다른 행 번호의 열에 반영되어야 합니다.

Awk - 관계형 처리. 열에 대한 편집 내용은 실제 행의 세 번째 열에 지정된 다른 행 번호의 열에 반영되어야 합니다.

awk sed File 1을 사용한 관계형 열 처리 ---> 열의 순서가 잘못된 데이터(중간 테스트 데이터가 있는 오래된 오래된 파일)

mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
Iq4iqnH4UftLgGUSobLeti0hkmdMn7
BlzanDNcIsgru2wNYlO6kDjpuPvs82
eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
YuuRhD5f3xju0RnUCjS66g3X2TNNIj
MpJHtG8FjeErwsh6emcCu7B4bHwCnR
aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
nXgwlL0p8LEWNFGznIy2NUXBWHzZgS

파일 2 ---> 동일한 데이터이지만 최종 순서임(연간 검토 후 새 파일 및 테스트 후 중간 데이터를 최종 형식으로 변경)

BlzanDNcIsgru2wNYlO6kDjpuPvs82
CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
Iq4iqnH4UftLgGUSobLeti0hkmdMn7
MpJHtG8FjeErwsh6emcCu7B4bHwCnR
YuuRhD5f3xju0RnUCjS66g3X2TNNIj
aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
nXgwlL0p8LEWNFGznIy2NUXBWHzZgS

문제를 설명해보세요. 이제부터는 Final_results 파일에 무엇을 하든 순서를 유지하면서 중간 테스트 파일에 동일한 변경 사항이 반영되기를 원합니다.

<(cat temp_data | nl) <(cat Final_results) 열 붙여넣기

1   CrWSI2eyZZkkYlEbOoHgu2o43tU3xa         3   BlzanDNcIsgru2wNYlO6kDjpuPvs82
2   BlzanDNcIsgru2wNYlO6kDjpuPvs82         5   CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
3   IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7      6   IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
4   Iq4iqnH4UftLgGUSobLeti0hkmdMn7         2   Iq4iqnH4UftLgGUSobLeti0hkmdMn7
5   aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f         8   MpJHtG8FjeErwsh6emcCu7B4bHwCnR
6   YuuRhD5f3xju0RnUCjS66g3X2TNNIj         7   YuuRhD5f3xju0RnUCjS66g3X2TNNIj
7   MpJHtG8FjeErwsh6emcCu7B4bHwCnR         9   aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
8   eqOZRXfdcxHqd26Raqd6ZOtPhoQp33         4   eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
9   mL9A7hajHyuVIQr1HNP7ThYfj9yBUd         1   mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
10  nXgwlL0p8LEWNFGznIy2NUXBWHzZgS         10  nXgwlL0p8LEWNFGznIy2NUXBWHzZgS

필수 관계 처리. 3 BlzanDNcIsgru2wNYlO6kDjpuPvs82--SUFFIX ---->File2(위 명령의 열 2)를 변경하면 변경 사항 6 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7-SUFFIX --->File1(위 명령의 열 1)이 반영됩니다.

예를 들어. IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7 테스트 전 Fina_results의 BlzanDNcIsgru2wNYlO6kDjpuPvs82입니다. 이제 Final에서 BlzanDNcIsgru2wNYlO6kDjpuPvs82에 수행한 작업은 이전 파일의 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7에 반영되어야 합니다.

문제1 원하는 출력 1

1   CrWSI2eyZZkkYlEbOoHgu2o43tU3xa         3   BlzanDNcIsgru2wNYlO6kDjpuPvs82--SUFFIX
2   BlzanDNcIsgru2wNYlO6kDjpuPvs82         5   CrWSI2eyZZkkYlEbOoHgu2o43tU3xa
3   IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7-SUFFIX   6   IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7
4   Iq4iqnH4UftLgGUSobLeti0hkmdMn7         2   Iq4iqnH4UftLgGUSobLeti0hkmdMn7
5   aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f         8   MpJHtG8FjeErwsh6emcCu7B4bHwCnR
6   YuuRhD5f3xju0RnUCjS66g3X2TNNIj         7   YuuRhD5f3xju0RnUCjS66g3X2TNNIj
7   MpJHtG8FjeErwsh6emcCu7B4bHwCnR         9   aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f
8   eqOZRXfdcxHqd26Raqd6ZOtPhoQp33         4   eqOZRXfdcxHqd26Raqd6ZOtPhoQp33
9   mL9A7hajHyuVIQr1HNP7ThYfj9yBUd         1   mL9A7hajHyuVIQr1HNP7ThYfj9yBUd
10  nXgwlL0p8LEWNFGznIy2NUXBWHzZgS         10  nXgwlL0p8LEWNFGznIy2NUXBWHzZgS

문제2 원하는 출력2 두 번째 파일을 첫 번째 파일로 바꿉니다.

붙여넣기 명령 출력 3을 참조하세요. BlzanDNcIsgru2wNYlO6kDjpuPvs82--SUFFIX에는 3이 있습니다. 따라서 첫 번째 열에서 행 3을 열 4의 첫 번째 행으로 변경하고 세 번째 열에 3을 변경해야 합니다. 마찬가지로 전체 출력이 열을 전치하여 최종적으로 변경된 데이터를 출력합니다.

1 mL9A7hajHyuVIQr1HNP7ThYfj9yBUd-Suffix
2 Iq4iqnH4UftLgGUSobLeti0hkmdMn7-Suffix
BlzanDNcIsgru2wNYlO6kDjpuPvs82-Suffix
4 eqOZRXfdcxHqd26Raqd6ZOtPhoQp33-Suffix
5 CrWSI2eyZZkkYlEbOoHgu2o43tU3xa-Suffix
6 IUnZ8VPgw0FuqJmsY6FYfUpMdDNnk7-Suffix
7 YuuRhD5f3xju0RnUCjS66g3X2TNNIj-Suffix
8 MpJHtG8FjeErwsh6emcCu7B4bHwCnR-Suffix
9 aQ1DXaG7XSopgxBeBsRRZcCh2xRu5f-Suffix
10 nXgwlL0p8LEWNFGznIy2NUXBWHzZgS-Suffix

## 단순화된 데이터(테스트 솔루션용)

1  Mina_Warren     2  Ayden_Silva
2  Jazlene_Gibbs   4  Quintin_Glover
3  Kaleigh_Farley  1  Callum_Mckay
4  Callum_Mckay    7  Jazlene_Gibbs
5  Finn_Nelson     6  Mina_Warren
6  Ayden_Silva     3  Kaleigh_Farley
7  Quintin_Glover  5  Finn_Nelson

출력(질문 1에만 해당)

1  Mina_Warren--Suffix3     2  Ayden_Silva---Suffix1
2  Jazlene_Gibbs--Suffix1   4  Quintin_Glover--Suffix2
3  Kaleigh_Farley--Suffix6  1  Callum_Mckay--Suffix3
4  Callum_Mckay--Suffix2    7  Jazlene_Gibbs-Suffix4
5  Finn_Nelson--Suffix7     6  Mina_Warren--Suffix5
6  Ayden_Silva--Suffix5     3  Kaleigh_Farley--Suffix6
7  Quintin_Glover--Suffix4  5  Finn_Nelson-Suffix7

(질문 1에만 적용됩니다.) 여기서 접미사 ---는 ---> 모든 유형의 처리, 편집, 이름 바꾸기, 교체 등을 의미합니다. n행, 4열의 모든 처리는 n행, 2열에 반영됩니다. ---> 여기서 n번째 행은 세 번째 열에서 얻어집니다.

awk 질문 1의 논리 - 첫 번째 레코드 읽기. --$4열을 변수에 저장한 다음 3열에 표시된 행 번호로 이동합니다. $3 --그런 다음 $2열을 $4에서 저장된 변수로 바꿉니다.

고려하다

1  Mina_Warren     2  Ayden_Silva
2  Jazlene_Gibbs   4  Quintin_Glover

세 번째 열은 관계 편집의 줄 번호입니다. 질문 1의 논리 1행 읽기 ---> Ayde _Silva를 변수에 저장 ---> 1행의 $3에 2가 있으므로 2행으로 이동 ---> 이제 2행 처리에서 Jazlene_Gibbs에 대해 동일한 작업을 수행합니다.

예상 출력 질문 1

Mina_Warren     2  Ayden_Silva--Suffix1
2  Jazlene_Gibbs--Suffix1   4  Quintin_Glover

질문 2의 논리1행을 전치하고 읽습니다 ---> Ayde_Silva를 변수에 저장합니다 ---> 1행의 $3에 2가 있으므로 2행으로 이동합니다 ---> 이제 2행에서 Ayde_Silve의 처리를 사용합니다 Jazlene_Gibbs를 대체하는 버전 ---> 루프의 모든 행에 대해 이 작업을 수행합니다. ---> 열 3과 4를 제거합니다.

예상 출력 질문 2

1  Callum_Mckay--Suffix3     
2  Ayden_Silva--Suffix1   
3  Kaleigh_Farley--Suffix6  
4  Quintin_Glover--Suffix2    
5  Finn_Nelson--Suffix7     
6  Mina_Warren--Suffix5     
7  Jazlene_Gibbs--Suffix4  

시험을 마친

in="$(awk 'END { print NR }' 1)" file
awk -v ty=$in '{for (i=1;i<=ty;i++) NR==$i; var=$4; varb=$3; NR == varb; $2=var; print}' file

하지만 예상대로 작동하지 않습니다. 내가 시도한 것은 = 총 레코드 수 7에 있는 다음 for 루프를 사용하여 7번 반복하는 것입니다 ---> i ==1 ##goto rrcord 1 - -> store $4 In var, store $3 in varb --> NR==varb ## varb에 지정된 레코드로 이동합니다(예: 2). $2를 var로 바꾸세요. Loop ---> i =2 레코드 2로 이동, 동일

답변1

사용CPAPWK:

지난달에 개발된 신제품입니다.

cppawk전처리, 일반 Awk에 대한 입력 생성을 위해 C 전처리기를 사용하고 Lisp와 같은 목록 처리, 고급 반복 및 기타 유틸리티를 위한 일부 라이브러리 헤더가 함께 제공됩니다.

질문 1:

#include <cons.h>

BEGIN {
  bag = list_begin()
}

{
  left[$1] = $2
  right[$3] = $4

  leftn[$3] = $1

  bag = list_add(bag, $3)
}

END {
  finlist = list_end(bag)

  dolist (i, finlist)
  {
    left[i] = left[i] "--Suffix" ++suff
    right[i] = right[i] "--Suffix" suff
  }

  dolist (i, finlist)
  {
     print leftn[i], left[leftn[i]], i, right[i]
  }
}

산출:

cppawk -f prob-1.cwk prob-1-data 
1 Mina_Warren--Suffix3 2 Ayden_Silva--Suffix1
2 Jazlene_Gibbs--Suffix1 4 Quintin_Glover--Suffix2
3 Kaleigh_Farley--Suffix6 1 Callum_Mckay--Suffix3
4 Callum_Mckay--Suffix2 7 Jazlene_Gibbs--Suffix4
5 Finn_Nelson--Suffix7 6 Mina_Warren--Suffix5
6 Ayden_Silva--Suffix5 3 Kaleigh_Farley--Suffix6
7 Quintin_Glover--Suffix4 5 Finn_Nelson--Suffix7

질문 2:

#include <cons.h>

BEGIN {
  bag = list_begin()
}

{
  left[$1] = $2
  right[$3] = $4

  leftn[$3] = $1

  bag = list_add(bag, $3)
}

END {
  finlist = list_end(bag)

  dolist (i, finlist)
  {
    left[i] = right[i] "--Suffix" ++suff
  }

  dolist (i, finlist)
  {
     print leftn[i], left[leftn[i]]
  }
}

산출:

cppawk -f prob-2.cwk prob-1-data 
1 Callum_Mckay--Suffix3
2 Ayden_Silva--Suffix1
3 Kaleigh_Farley--Suffix6
4 Quintin_Glover--Suffix2
5 Finn_Nelson--Suffix7
6 Mina_Warren--Suffix5
7 Jazlene_Gibbs--Suffix4

관련 정보