给定一个variables值的input文件(例子):
A B D
什么是从另一个文件中删除所有以上述值之一开头的行的脚本? 例如,文件内容:
A B C D
最终会成为:
C
input文件是100,000个variables值的顺序。 要修剪的文件大约有几百万行。
我可以等待一个不是当前shellterminal的subprocess的进程终止吗?
使用awkredirect命令输出
在linux中使用AWK将date转换为纪元时间
awk / sed在两个模式之间插入一行
用CURL检查redirect的Bash脚本
除非连字符超过2位数字,否则在数字之间删除连字符
计算pipe道分隔文件中的列数
我怎样才能将awk分隔符设置为string或字符?
AWK:在打印“打印$ 0”时保留格式
如何用awk统计文件中的所有数字?
awk ' NR==FNR { # IF this is the first file in the arg List THEN List[$0] # store the contents of the current record as an index or array "List" next # skip the rest of the script and so move on to the next input record } # ENDIF { # This MUST be the second file in the arg List for (i in List) # FOR each index "i" in array "List" DO if (index($0,i) == 1) # IF "i" starts at the 1st char on the current record THEN next # move on to the next input record } 1 # Specify a true condition and so invoke the default action of printing the current record. ' file1 file2
构建数组然后对每个元素进行字符串比较的另一种方法是建立一个正则表达式,例如:
... List = List "|" $0 ...
然后做一个RE比较:
... if ($0 ~ List) next ...
但我不确定会比循环更快,那么你就不必担心在file1中出现RE元字符。
如果file1中的所有值都是真正的单个字符,那么创建字符列表以在RE比较中使用的方法可能适合您:
awk 'NR==FNR{List = List $0; next} $0 !~ "^[" List "]"' file1 file2
你也可以使用egrep来实现这个功能:
egrep -vf <(sed 's/^/^/' file1) file2
让我们看看它的行动:
$ cat file1 A B $ cat file2 Asomething B1324 C23sd D2356A Atext CtestA EtestB Bsomething $ egrep -vf <(sed 's/^/^/' file1) file2 C23sd D2356A CtestA EtestB
这将删除以file1中的某个值开始的行。
你可以使用comm来显示两个文件不常见的行,如下所示:
comm -3 file1 file2
将打印:
C
请注意,为了这个工作,这两个文件必须排序,如果他们不排序,你可以绕过使用
comm -3 <(sort file1) <(sort file2)
总结以上是内存溢出为你收集整理的从文件行中删除所有行的可扩展方法,其中行以多个值之一开头全部内容,希望文章能够帮你解决从文件行中删除所有行的可扩展方法,其中行以多个值之一开头所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)