我有一个巨大的file1,其值如下:
a 1
b 2
c 3
d 4
e 5
我有另一个巨大的文件2,冒号用七个字段分隔如下:
a:2543:2524:2542:252:536365:54654
c:5454:5454:654:54:87:54
d:87:65:1:98:32:87
我想在行中搜索file1的变量,并在file2的第7列中替换它的值,所以输出应该如下:
a:2543:2524:2542:252:536365:1
c:5454:5454:654:54:87:3
d:87:65:1:98:32:4
答案 0 :(得分:0)
假设文件是发布的
,也许这个awk
会起作用
awk -F: 'NR==FNR{a[$1]=$0;next;}a[$1]{$0=a[$1]}1' file1 file2
a:2543:2524:2542:252:536365:1
c:5454:5454:654:54:87:3
d:87:65:1:98:32:4
答案 1 :(得分:0)
所以我想出了一个解决方案;结束了几行代码。也许有更好的方法来做到这一点。但这有效!
while read line ; do
var1=`echo $line| awk '{print $1}'`
var2=`echo $line| awk '{print $2}'`
awk -v var1="$var1" -v var2="$var2" -F ':' 'BEGIN { OFS = ":"} $1==var1 {sub(".*",var2,$7)}{print}' file2 > file2.tmp
mv file2.tmp file2
done < file1
cat file2
答案 2 :(得分:0)
这应该有效 - 它假设两个文件都在第一列上排序 - 我对你的解决方案对于非常大的文件 - 速度和内存 - 的任何性能比较非常感兴趣 - - 补充是特定于linux的但如果不可用则容易更换
file0=$1 #file with single value
file1=$2 #file with 6th value to be replaced
# normalize on colon delimiter
tr ' ' : <$file0|
# join on first field
join -t: $file1 -|
# delete column 7
cut --complement -d: -f7