现在有两份文件,A和B,A 和B 有部分内容是相同的,我想把相同内容A的行,用相同内容的B的那一行替换掉,请写一段shell 程序
时间: 2023-05-31 18:05:03 浏览: 69
通信与网络中的支持无线内容传送的苹果A-TV设计解析
可以使用awk命令来实现这个功能。
假设A和B的文件名分别为fileA和fileB,相同的内容在文件中出现的行数一样,可以按照行数来进行替换。具体步骤如下:
1. 读取fileA和fileB文件的内容,并将其分别存储到两个数组中。
```
awk '{a[NR]=$0} END {for(i=1;i<=NR;i++) print a[i]}' fileA > tmpA
awk '{b[NR]=$0} END {for(i=1;i<=NR;i++) print b[i]}' fileB > tmpB
```
2. 遍历数组a和b,将相同行数的内容进行替换。
```
awk 'NR==FNR{a[FNR]=$0;next}{if(a[FNR]=="") print $0;else print a[FNR]}' tmpB tmpA > output
```
3. 删除临时文件。
```
rm tmpA tmpB
```
完整的shell程序如下:
```
#!/bin/bash
awk '{a[NR]=$0} END {for(i=1;i<=NR;i++) print a[i]}' fileA > tmpA
awk '{b[NR]=$0} END {for(i=1;i<=NR;i++) print b[i]}' fileB > tmpB
awk 'NR==FNR{a[FNR]=$0;next}{if(a[FNR]=="") print $0;else print a[FNR]}' tmpB tmpA > output
rm tmpA tmpB
```
运行该程序后,相同内容在A和B文件中出现的行将被替换,替换后的结果将输出到output文件中。
阅读全文