使用awk消除文件夹中所有文件中出现的所有值
我有一个文件夹,其中有几个文件,我想使用使用awk消除文件夹中所有文件中出现的所有值,awk,Awk,我有一个文件夹,其中有几个文件,我想使用awk删除它们的所有共同术语。 以下是我一直在使用的脚本: awk ' FNR==1 { if (seen[FILENAME]++) { firstPass = 0 outfile = FILENAME "_new" } else { firstPass = 1 numFiles++ ARGV[ARGC++] = FILE
awk
删除它们的所有共同术语。
以下是我一直在使用的脚本:
awk '
FNR==1 {
if (seen[FILENAME]++) {
firstPass = 0
outfile = FILENAME "_new"
}
else {
firstPass = 1
numFiles++
ARGV[ARGC++] = FILENAME
}
}
firstPass { count[$2]++; next }
count[$2] != numFiles { print > outfile }
' *
文件中的信息示例如下:
文件1
文件2
输出应为:
File1_new
3 coffee
8 milk
File2_new
4 dog
9 cat
当我使用少量文件(即10个)时,它可以工作,但当我开始增加该数量时,我会收到以下错误消息:
awk: file20_new makes too many open files input record number 27, file file20_new source line number 14
当我使用大量文件时,错误来自哪里
我的主要目标是在文件夹中的所有文件上运行此脚本,以生成不包含文件夹中所有文件中出现的任何单词的新文件。使用
时,将打开一个文件进行写入(并截断)。正如评论中所建议的,您需要在继续操作时关闭文件。试着这样做:
awk '
FNR==1 {
if (seen[FILENAME]++) {
firstPass = 0
if (outfile) close(outfile) # <-- close the previous file
outfile = FILENAME "_new"
}
else {
firstPass = 1
numFiles++
ARGV[ARGC++] = FILENAME
}
}
firstPass { count[$2]++; next }
count[$2] != numFiles { print > outfile }
' *
awk'
FNR==1{
如果(见[FILENAME]++){
首次通过=0
如果(输出文件)关闭(输出文件)#输出文件}
' *
处理完文件后,你需要关闭()
你的文件。就像你永远随身携带打开的每个文件一样。你可能不需要if(outfile)
,它看起来更干净。
awk: file20_new makes too many open files input record number 27, file file20_new source line number 14
awk '
FNR==1 {
if (seen[FILENAME]++) {
firstPass = 0
if (outfile) close(outfile) # <-- close the previous file
outfile = FILENAME "_new"
}
else {
firstPass = 1
numFiles++
ARGV[ARGC++] = FILENAME
}
}
firstPass { count[$2]++; next }
count[$2] != numFiles { print > outfile }
' *