写一个shell脚本,对比文本文件A和文本文件B的不同行,并将A不同于B的文本按行输出至文本文件AA,将B不同于A的文本按行输出至文本文件BB
时间: 2024-02-21 17:59:46 浏览: 54
好的,以下是一个简单的实现:
```bash
#!/bin/bash
# 检查参数个数是否正确
if [ $# -ne 2 ]; then
echo "Usage: $0 file1 file2"
exit 1
fi
# 检查文件是否存在
if [ ! -f "$1" ] || [ ! -f "$2" ]; then
echo "Error: file does not exist"
exit 1
fi
# 对比文件并输出差异行
diff --new-line-format="" --unchanged-line-format="" "$1" "$2" | grep -v "^$" > AA
diff --new-line-format="" --unchanged-line-format="" "$2" "$1" | grep -v "^$" > BB
echo "Done"
```
这个脚本接受两个参数,分别为需要对比的两个文件的路径。脚本会使用 `diff` 命令对比两个文件,并使用 `grep` 过滤掉空行,最终将不同的行分别输出至 `AA` 和 `BB` 文件中。
相关问题
写一个shell脚本,比较A和B的文本,如果存在相同的文本则输出A文本对应的行号和B文本对应的行号到文件LINE中
好的,以下是一个简单的shell脚本用于比较A和B两个文本文件中的行,如果存在相同的行,则输出A文本对应的行号和B文本对应的行号到文件LINE中:
```bash
#!/bin/bash
# 定义文件名
file_a="file_a.txt"
file_b="file_b.txt"
line_file="LINE.txt"
# 比较文本并输出相同行的行号
awk 'NR==FNR{a[$0];next} $0 in a{print NR,NR-FNR}' $file_a $file_b > $line_file
```
脚本中使用 `awk` 工具来比较文本文件 A 和 B,如果存在相同的行,则输出 A 文件对应的行号和 B 文件对应的行号到文件 LINE 中。脚本中的 `NR` 表示当前行号,`FNR` 表示当前文件的行号,因此 `NR-FNR` 就是 B 文件中相同行对应的行号。
你可以将脚本保存为 `compare.sh`,并在终端中执行 `bash compare.sh` 来运行。当然,在执行脚本之前,你需要先将 A 和 B 文件的文件名和路径修改为你自己的文件名和路径。
阅读全文