如何操作vim 解决该问题。 宏能行吗?(附图)

Vim、Emacs配置和使用
回复
hjjdebug
帖子: 94
注册时间: 2009-04-21 9:48

如何操作vim 解决该问题。 宏能行吗?(附图)

#1

帖子 hjjdebug » 2014-01-10 14:24

有两个文件。 一个文件叫all.txt, 记录了所有的文件名称。
另一个文件叫search.txt. 记录了待查找的文件名称。
现在要做的是:从search.txt 中取出一个文件名。例如第一个boys00264
在all.txt 中去查找,如果找不到,就留着。
如果找到了,就删除该行。
目的是看一看, search.txt 中有哪些文件在all.txt 中不存在。
cctv5a01022 存在, 需要删除该行。
(附图)
[img]
search.png
[/img]
附件
all.txt
(45.95 KiB) 已下载 112 次
search.txt
(1.66 KiB) 已下载 112 次
hjjdebug
帖子: 94
注册时间: 2009-04-21 9:48

Re: 如何操作vim 解决该问题。 宏能行吗?(附图)

#2

帖子 hjjdebug » 2014-01-10 14:33

文件很多,不要试图手工完成工作。
由于查找时有找到,找不到两种情况,录制宏命令好像不行吧?
编script 也可以,求答案! 致谢!
头像
tailsgao
帖子: 209
注册时间: 2010-07-09 7:37

Re: 如何操作vim 解决该问题。 宏能行吗?(附图)

#3

帖子 tailsgao » 2014-01-10 14:53

用sed,awk编个脚本吧 :em11
hjjdebug
帖子: 94
注册时间: 2009-04-21 9:48

Re: 如何操作vim 解决该问题。 宏能行吗?(附图)

#4

帖子 hjjdebug » 2014-01-10 15:10

tailsgao 写了:用sed,awk编个脚本吧 :em11
编个脚本也行啊,求示例。
c 语言我知道我能够解决。但那太麻烦了。
vim 直接解决最好。
vim script 解决也很好。
脚本能解决也很好。
总之, 方法越简单越好。
头像
Methuselar
帖子: 122
注册时间: 2009-06-04 12:06
联系:

Re: 如何操作vim 解决该问题。 宏能行吗?(附图)

#5

帖子 Methuselar » 2014-01-10 15:17

对输出顺序没要求的话:

代码: 全选

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 解决该问题。 宏能行吗?(附图)

#6

帖子 tailsgao » 2014-01-10 16:00

#! /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
hjjdebug
帖子: 94
注册时间: 2009-04-21 9:48

Re: 如何操作vim 解决该问题。 宏能行吗?(附图)

#7

帖子 hjjdebug » 2014-01-10 16:03

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
第一次看到这么复杂的awk 代码, google 了一下NR, FNR ....
竟然被我看懂了,
语言是想通的。 感谢!Methuselar :em06
hjjdebug
帖子: 94
注册时间: 2009-04-21 9:48

Re: 如何操作vim 解决该问题。 宏能行吗?(附图)

#8

帖子 hjjdebug » 2014-01-10 16:25

tailsgao 写了:#! /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
while sed '/"$line"' f2
有一个错误提示, sed: -e 表达式 #1, 字符 8:未终止的地址正则表达式! ?
添加一个/, 将这句话改为:while sed '/"$line"/' f2
错误为: sed: -e 表达式 #1, 字符 9: 遗漏命令
请问如何解决?
bash 的这种写法, 也让我开眼! 感谢!
头像
lilydjwg
论坛版主
帖子: 4249
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 如何操作vim 解决该问题。 宏能行吗?(附图)

#9

帖子 lilydjwg » 2014-01-10 17:20

[bash]
comm -23 <(sort all.txt) <(awk '{print $1}' search.txt | sort)
[/bash]
原来 search.txt 里还有奇怪的东西么……说清楚呀。
hjjdebug
帖子: 94
注册时间: 2009-04-21 9:48

Re: 如何操作vim 解决该问题。 宏能行吗?(附图)

#10

帖子 hjjdebug » 2014-01-10 19:08

lilydjwg 写了:[bash]
comm -23 <(sort all.txt) <(awk '{print $1}' search.txt | sort)
[/bash]
原来 search.txt 里还有奇怪的东西么……说清楚呀。
估计是网络传输问题,是不是成了dos 格式了?
谢谢,针对这个问题,你的方法可能是最简单的。 您直接用已有的命令完成了文件比较。
回复