如果行与嵌套 [While、IF、Sed] 语句中其他文件中的行匹配,则替换该行

如果行与嵌套 [While、IF、Sed] 语句中其他文件中的行匹配,则替换该行

我有一个 17k 行长的文件F1,每行 8 个字段,格式如下:

id1 field2 field3 field4 field5 field6 field7 field8
id2 field2 field3 field4 field5 field6 field7 field8

第二个文件F2内容在每行(一列)的单个字段中展开

id1
uuuuuuu
bbbbbbb
aaaaaaa
id2
ttttttt
qqqqqqq
...

如果存在匹配,则应将from 的行F2替换为 from 的行。我认为下面奇怪的 while 循环可以工作,但不用说,它会返回每次更改的F1所有行。F2或者也许 Bash 可能有其他神奇的工具可以做到这一点?

while read id1 id2 id3 id4 id5; do
        while read ID; do
                if [[ $ID == "$id1" ]]; then
                        sed "s/$ID/$id1 $id2 $id5 $id4/" F2 && break
                fi
        done < F2
done < F1

答案1

这是一份工作

awk 'NR == FNR {line[$1] = $0; next} $1 in line {$0 = line[$1]} 1' F1 F2 
  1. NR == FNR {line[$1] = $0; next}- 读取时F1,存储由第一个字段键入的每一行
  2. $1 in line {$0 = line[$1]}-- 我们F2现在正在阅读:如果第一个字段在数组中line,则将数组值替换为当前记录。
  3. 1-- 打印当前记录。

相关内容