검색 및 바꾸기를 사용하여 데이터 업데이트

검색 및 바꾸기를 사용하여 데이터 업데이트
get_data.txt
ald900  NON-Prod        GOOG037-A   US
ald9024 NON-Prod        GOOG037-A   SRI-LANKA
ald978  NON-Prod        GOOG037-A   JAPAN

두 개의 주어진 데이터가 있습니다. get_data.txt에서 검색하고 resultant.txt에서 업데이트해야 합니다. get_data.txt에서 데이터를 가져올 수 있지만 resultant.txt에서는 업데이트할 수 없습니다.

resultant.txt
ald900.google.com   #N/A    #N/A
ald978.vci.google.com   #N/A    0
ald9024.google.com  #N/A    #N/A

샘플 코드

while read ln
  do
  cat get_data.txt |grep $ln |awk '{print $4}'
done < cat resultant.txt | cut -d "." -f1

이를 통해 업데이트할 값을 얻을 수 있지만 resultant.txt에서 #N/A & 0을 사용하여 "cat get_data.txt |grep $ln |awk '{print $4}'" 결과를 업데이트하려면 어떻게 해야 합니까?

이런 결과가 필요해

resultant.txt
ald900.google.com   #N/A    US
ald978.vci.google.com   #N/A    JAPAN
ald9024.google.com  #N/A    SRI-LANKA

답변1

awk로 이동:

awk 'NR==FNR{a[$1]=$NF;next}{split($1,arr,/\./);$NF=a[arr[1]]}1' get_data.txt resultant.txt > tmpfile
mv tmpfile resultant.txt

산출:

ald900.google.com #N/A US
ald978.vci.google.com #N/A JAPAN
ald9024.google.com #N/A SRI-LANKA

awk는 뭐하는거야?

awk '
    NR==FNR{
        a[$1]=$NF           #Array `a` stores last fields of get_data.txt using the 1st fields as keys
        next
    } 
    {
        split($1,arr,/\./)  #Split 1st field of resultant.txt on the dots
        $NF=a[arr[1]]       #Retrieve the corresponding element in a and replace the last field with it
    }
    1                       #Print the resulting line
' get_data.txt resultant.txt

참고: 출력 파일을 탭으로 구분하려면 -v OFS='\t'awk( awk -v OFS='\t' '...' get_data.txt resultant.txt > tmpfile)에 추가하세요.

관련 정보