写一个shell脚本,对比文本A和文本B中以数字或者负号开头的所有行,如果存在相同则输出该行及以该行前面4行的内容分别到AA和BB
时间: 2024-03-17 19:44:14 浏览: 30
好的,以下是脚本的实现:
```
#!/bin/bash
# 提取文本A和文本B中以数字或负号开头的所有行
grep -E '^[-0-9]' A.txt > A_filtered.txt
grep -E '^[-0-9]' B.txt > B_filtered.txt
# 对比文本A和文本B中相同的行,并输出该行及以该行前面4行的内容到AA和BB
comm -12 A_filtered.txt B_filtered.txt | while read line; do
awk -v pattern="$line" 'BEGIN{matched=0} $0 ~ pattern {matched=1} matched && NR <= FNR+4 {print >> "AA"} matched && NR > FNR && NR <= FNR+4 {print >> "BB"}' A_filtered.txt B_filtered.txt
done
```
脚本分为了三个步骤:
1. 使用`grep`命令从文本A和文本B中提取以数字或负号开头的所有行,并将结果分别存储到`A_filtered.txt`和`B_filtered.txt`中。
2. 使用`comm`命令找出文本A和文本B中相同的行,并使用`awk`命令提取这些行及它们前面的4行,并将结果分别输出到`AA`和`BB`文件中。
3. 注意到上面的`while`循环是为了处理多个相同的行,因为`comm`命令得到的结果可能包含多行。在循环中,我们使用`awk`命令提取相同的行并输出到文件。这里使用了`matched`变量来标记当前行是否是相同的行,`pattern`变量是当前循环到的相同的行,`FNR`是当前处理的文件的行号,`NR`是当前处理的总行号。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)