使用搜索和替换更新数据

使用搜索和替换更新数据
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 中 grep 数据,但无法在 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)。

相关内容