如何使用地图文件替换文件中的字符串

时间:2019-05-17 08:41:20

标签: linux unix sed

我需要根据在不同平面文件中准备的映射替换文件中的字符串。

我尝试使用.sed文件和选项-f来执行此操作,但是它不起作用。

file.txt

A
B
C

replace.sed

A,1
B,2
C,3

我想在输出文件中拥有什么

1
2
3

我正在尝试对包含大量数据的文件进行处理,并且文件未排序。如果需要,我可以对其进行排序。

2 个答案:

答案 0 :(得分:1)

一种方法:

$ awk -F, 'NR == FNR { a[$1] = $2; next }
             $0 in a { $0 = a[$0] } 1' replace.sed file.txt

old,new中的所有replace.sed对添加到一个关联数组,对于file.txt中的每一行,如果该行是数组中的键,则用新的行替换值,最后打印出可能更改的行。

答案 1 :(得分:0)

使用bash可以尝试:

#!/bin/bash
readarray -t map < replace.txt
cmd=()
for line in "${map[@]}"; do
   cmd+=("s|${line//,/|}|;")
done
sed "${cmd[*]}" file.txt