我需要根据在不同平面文件中准备的映射替换文件中的字符串。
我尝试使用.sed文件和选项-f来执行此操作,但是它不起作用。
file.txt
A
B
C
replace.sed
A,1
B,2
C,3
我想在输出文件中拥有什么
1
2
3
我正在尝试对包含大量数据的文件进行处理,并且文件未排序。如果需要,我可以对其进行排序。
答案 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