我有两个文件 文件1
104.128.225.208:8000
103.27.24.114:80
104.128.225.208:8000
和file2
103.27.24.114:99999999
103.27.24.114:88888888888
104.128.225.208:8000
103.27.24.114:80
104.128.225.208:8000
并且在file2中有两个新行
103.27.24.114:99999999
103.27.24.114:88888888888
所以我想检查文件中是否有新行
for i in $(cat $2)
do
for j in $(cat $1)
do
if [ $i = $j ]; then
echo $i
fi
done
done
/.program file1 file2
但我没有得到预期的输出。我认为我的if语句不能正常工作。我做错了什么?
答案 0 :(得分:3)
您的问题可能是您在file1中为每个行中的每行循环。
comm
实用程序可以执行您想要的操作,但它会假定这两个文件都已排序。
$ sort file1 -o file1
$ sort file2 -o file2
$ comm -13 file1 file2
103.27.24.114:99999999
103.27.24.114:88888888888
答案 1 :(得分:1)
这是diff
的用途。例如:
$ diff dat/newdat1.txt dat/newdat2.txt
0a1,2
> 103.27.24.114:99999999
> 103.27.24.114:88888888888
newdat1.txt
和newdat2.txt
的位置:
104.128.225.208:8000
103.27.24.114:80
104.128.225.208:8000
和
103.27.24.114:99999999
103.27.24.114:88888888888
104.128.225.208:8000
103.27.24.114:80
104.128.225.208:8000
根据选项和需求,您可以根据输出或不输出来测试diff
的返回值。 (例如if diff -q $file1 $file2 >/dev/null; then echo same; else echo differ; fi
)
答案 2 :(得分:0)
#!/bin/bash
for n in $(diff file1 file2); do
if [ -z "$firstLineDiscarded" ]; then
firstLineDiscarded=TRUE
elif [ $n != ">" ]; then
echo $n
fi
done
如果您不依赖于这种特定的方法,这似乎有效。
当然,如果输入语法发生变化(包括数据中的空格),它就会崩溃,但对于这个严格的应用程序......可能已经足够了。