首页 > 解决方案 > 如何在 Linux 中从一个文件中搜索字符串并更新到另一个文件

问题描述

我有两个文件,我正在从一个文件中逐个搜索字符串并将记录更新到另一个文件中。假设我有文本文件 A.csv

TABLE1, ABC_STRING
TABLE2, ABC_STRING
TABLE3, ABC_STRING

B.csv

TABLEA,SOMEVALUE,ABC_STRING,NULL,ABC_STRING
TABLEB,SOMEVALUE,ABC_STRING,NULL,ABC_STRING
TABLE1,SOMEVALUE,ABC_INT,NULL,ABC_INT
TABLEC,SOMEVALUE,ABC_STRING,NULL,ABC_STRING
TABLE2,SOMEVALUE,ABC_INT,NULL,ABC_INT
TABLE3,SOMEVALUE,ABC_INT,NULL,ABC_INT

期待新文件中的输出,例如:

TABLEA,SOMEVALUE,ABC_STRING,NULL,ABC_STRING
TABLEB,SOMEVALUE,ABC_STRING,NULL,ABC_STRING
TABLE1,SOMEVALUE,ABC_STRING,NULL,ABC_STRING
TABLEC,SOMEVALUE,ABC_STRING,NULL,ABC_STRING
TABLE2,SOMEVALUE,ABC_STRING,NULL,ABC_STRING
TABLE3,SOMEVALUE,ABC_STRING,NULL,ABC_STRING

我试过这样:

for i in $(grep -w "ABC_STRING" A.csv | awk -F ',' '{print $1}'); do
grep -w "$i" B.csv | sed 's/ABC_INT/ABC_STRING/g'
done | more

我不确定如何编写命令来复制每一行检查它是否包含字符串,如果它可用,则替换并将其写入 C.csv,如果不将其写入同一个 C.csv。谁能提供我的要求的代码片段。

标签: linuxunixawkgrep

解决方案


awk -F', *' -v OFS=',' 'NR==FNR{m[$1]=$2; next} $1 in m{$3=$5=m[$1]} 1' A.csv B.csv > C.csv

推荐阅读