如何操作vim 解决该问题。 宏能行吗?(附图)
-
- 帖子: 94
- 注册时间: 2009-04-21 9:48
如何操作vim 解决该问题。 宏能行吗?(附图)
有两个文件。 一个文件叫all.txt, 记录了所有的文件名称。
另一个文件叫search.txt. 记录了待查找的文件名称。
现在要做的是:从search.txt 中取出一个文件名。例如第一个boys00264
在all.txt 中去查找,如果找不到,就留着。
如果找到了,就删除该行。
目的是看一看, search.txt 中有哪些文件在all.txt 中不存在。
cctv5a01022 存在, 需要删除该行。
(附图)
[img] [/img]
另一个文件叫search.txt. 记录了待查找的文件名称。
现在要做的是:从search.txt 中取出一个文件名。例如第一个boys00264
在all.txt 中去查找,如果找不到,就留着。
如果找到了,就删除该行。
目的是看一看, search.txt 中有哪些文件在all.txt 中不存在。
cctv5a01022 存在, 需要删除该行。
(附图)
[img] [/img]
- 附件
-
- all.txt
- (45.95 KiB) 已下载 114 次
-
- search.txt
- (1.66 KiB) 已下载 115 次
-
- 帖子: 94
- 注册时间: 2009-04-21 9:48
Re: 如何操作vim 解决该问题。 宏能行吗?(附图)
文件很多,不要试图手工完成工作。
由于查找时有找到,找不到两种情况,录制宏命令好像不行吧?
编script 也可以,求答案! 致谢!
由于查找时有找到,找不到两种情况,录制宏命令好像不行吧?
编script 也可以,求答案! 致谢!
- tailsgao
- 帖子: 209
- 注册时间: 2010-07-09 7:37
Re: 如何操作vim 解决该问题。 宏能行吗?(附图)
用sed,awk编个脚本吧
-
- 帖子: 94
- 注册时间: 2009-04-21 9:48
Re: 如何操作vim 解决该问题。 宏能行吗?(附图)
编个脚本也行啊,求示例。tailsgao 写了:用sed,awk编个脚本吧
c 语言我知道我能够解决。但那太麻烦了。
vim 直接解决最好。
vim script 解决也很好。
脚本能解决也很好。
总之, 方法越简单越好。
- Methuselar
- 帖子: 122
- 注册时间: 2009-06-04 12:06
- 联系:
Re: 如何操作vim 解决该问题。 宏能行吗?(附图)
对输出顺序没要求的话:
代码: 全选
awk 'FNR == NR { d[$1] = $0 } FNR < NR { d[$0] = "" } END {for (i in d) { if (d[i]) print d[i]}}' search.txt all.txt
Mea Culpa!
- tailsgao
- 帖子: 209
- 注册时间: 2010-07-09 7:37
Re: 如何操作vim 解决该问题。 宏能行吗?(附图)
#! /bin/bash
f1=7
f2=8
exec 7<search.txt
exec 8<all.txt
while read line
do
while sed '/"$line"' f2
do
sed '/"$line"/d' f1
done
done
f1=7
f2=8
exec 7<search.txt
exec 8<all.txt
while read line
do
while sed '/"$line"' f2
do
sed '/"$line"/d' f1
done
done
-
- 帖子: 94
- 注册时间: 2009-04-21 9:48
Re: 如何操作vim 解决该问题。 宏能行吗?(附图)
第一次看到这么复杂的awk 代码, google 了一下NR, FNR ....Methuselar 写了:对输出顺序没要求的话:代码: 全选
awk 'FNR == NR { d[$1] = $0 } FNR < NR { d[$0] = "" } END {for (i in d) { if (d[i]) print d[i]}}' search.txt all.txt
竟然被我看懂了,
语言是想通的。 感谢!Methuselar
-
- 帖子: 94
- 注册时间: 2009-04-21 9:48
Re: 如何操作vim 解决该问题。 宏能行吗?(附图)
while sed '/"$line"' f2tailsgao 写了:#! /bin/bash
f1=7
f2=8
exec 7<search.txt
exec 8<all.txt
while read line
do
while sed '/"$line"' f2
do
sed '/"$line"/d' f1
done
done
有一个错误提示, sed: -e 表达式 #1, 字符 8:未终止的地址正则表达式! ?
添加一个/, 将这句话改为:while sed '/"$line"/' f2
错误为: sed: -e 表达式 #1, 字符 9: 遗漏命令
请问如何解决?
bash 的这种写法, 也让我开眼! 感谢!
- lilydjwg
- 论坛版主
- 帖子: 4252
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 如何操作vim 解决该问题。 宏能行吗?(附图)
[bash]
comm -23 <(sort all.txt) <(awk '{print $1}' search.txt | sort)
[/bash]
原来 search.txt 里还有奇怪的东西么……说清楚呀。
comm -23 <(sort all.txt) <(awk '{print $1}' search.txt | sort)
[/bash]
原来 search.txt 里还有奇怪的东西么……说清楚呀。
-
- 帖子: 94
- 注册时间: 2009-04-21 9:48
Re: 如何操作vim 解决该问题。 宏能行吗?(附图)
估计是网络传输问题,是不是成了dos 格式了?lilydjwg 写了:[bash]
comm -23 <(sort all.txt) <(awk '{print $1}' search.txt | sort)
[/bash]
原来 search.txt 里还有奇怪的东西么……说清楚呀。
谢谢,针对这个问题,你的方法可能是最简单的。 您直接用已有的命令完成了文件比较。