我有两个单独的文件,我希望在file1
中搜索并替换file2
中的多个字符串的整行。我一直在使用awk
,但我不知道如何替换一串字符串的字符串。以下是我要做的事情的一个例子。
要替换的字符串将匹配该行的第一个字段以替换它(要插入的多个字符串代替单个字符串)。它是一个"发现和替换"任务。
文件1:
001 111 112 113 116 117
002 221 222
003 331
004
005 551 555
file2的:
113 114 115
222 223 224 225 226 227
551 552 553 554
期望的输出:
001 111 112 113 114 115 116 117
002 221 222 223 224 225 226 227
003 331
004
005 551 552 553 554 555
答案 0 :(得分:3)
试试这个:
awk 'NR==FNR{a[$1]=$0;next}{for(i=1;i<=NF;i++)$i=($i in a?a[$i]:$i)}1' file2 file1
001 111 112 113 114 115 116 117
002 221 222 223 224 225 226 227
003 331
004
005 551 552 553 554 555
答案 1 :(得分:2)
你走了:
awk '
FILENAME == "file2" {
key = $1
map[key] = $0
next
}
{
for (i = 1; i <= NF; i++) {
if (map[$i])
$i = map[$i]
}
print
}
' file2 file1
001 111 112 113 114 115 116 117
002 221 222 223 224 225 226 227
003 331
004
005 551 552 553 554 555
这将从file2中获取行,并用整行填充一个名为map
的数组,键入第一个元素(我将awk&#39; s关联数组系统更像哈希)。否则,循环遍历每个元素并替换具有map
值的元素,然后打印输出。请注意,必须首先提供file2才能运行,以便可以填充map
数组。