【发布时间】:2015-04-02 23:25:03
【问题描述】:
我有两个文本文件:
文件1.txt
dadads 434 43 {"4fsdf":"66db1" fdf1:"5834"}
gsgss 45 0 {"gsdg":"8853" sgdfg:"4631"}
fdf 767 4643 {"klhf":"3455" kgs:"4566"}
.
.
文件2.txt
8853
6437437567
36265
4566
.
.
输出可能是两个文件
Match.txt
gsgss 45 0 {"gsdg":"8853" sgdfg:"4631"}
fdf 767 4643 {"klhf":"3455" kgs:"4566"}
Non_Match.txt
dadads 434 43 {"4fsdf":"66db1" fdf1:"5834"}
有人可以帮我为此编写 bash 脚本吗?
如果有帮助,我想我的逻辑在这里:
for (rows in File1.txt) {
bool found = false;
for (id in File2.txt) {
if (row contains id) {
found = true;
echo row >> Match.txt
break;
}
}
if (!found) {
echo row >> Non_Match.txt
}
}
编辑部分:
我也有一个 bash 脚本,但它没有帮助,因为它没有放置匹配的行,而是只放置匹配的 ID。
#!/bin/bash
set -e
file1="File2.txt"
file2="File1.txt"
for id in $(tail -n+1 "${file1}"); do
if ! grep "${id}" "${file2}"; then
echo "${id}" >>non_matches.txt
else
echo "${id}" >>matches.txt
fi
done
【问题讨论】:
-
diff比较文件逐行,但与行等价。 -
我认为常规的 diff 命令无法满足我的需求。
-
你的逻辑看起来不错,你应该尝试编写脚本,而不是让随机的互联网陌生人为你做。
-
@user175084:你可以使用
wdiff... -
文件也是1.8M和15M.. wdiff会支持吗??
标签: linux bash file shell file-comparison