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
)。