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
)에 추가하세요.