文件1.txt
:
13002:1:3:6aw:4:g:Dw:S:5342:dsan
13003:5:3s:6s:4:g:D:S:3456:fdsa
13004:16:t3:6:4hh:g:D:S:5342:inef
文件2.txt
:
13002:6544
13003:5684
我需要用1.txt
的第2列中的新数据替换2.txt
的第9列中的旧数据。我认为这可以逐行完成,因为两个文件具有相同的列1字段。这是3Gb的文件大小。我一直在玩awk,但无法实现以下目标。
我正在尝试以下操作:
awk 'NR==FNR{a[$1]=$2;} {$9a[b[2]]}' 1.txt 2.txt
预期结果:
13002:1:3:6aw:4:g:Dw:S:6544:dsan
13003:5:3s:6s:4:g:D:S:5684:fdsa
13004:16:t3:6:4hh:g:D:S:5342:inef
答案 0 :(得分:3)
您似乎尝试了几种错别字。您想用数组中的值替换$ 9(如果已定义)。另外,您还要确保Awk在输入和输出上都使用冒号作为分隔符。
awk -F : 'BEGIN { OFS=FS }
NR==FNR{a[$1]=$2; next}
$1 in a {$9 = a[$1] } 1' 2.txt 1.txt
请注意2.txt
的开头如何,因此NR==FNR
在读取此文件时为true,但在开始读取1.txt
时为true。第一个块中的next
阻止Awk在读取第一个文件时执行第二个条件。最后的1
是无条件print
的简写,当然,无论是否替换了任何内容,第二个文件中的每一行都将执行它。