Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File Linux文件之间的字符串匹配_File_Grep_Pattern Matching - Fatal编程技术网

File Linux文件之间的字符串匹配

File Linux文件之间的字符串匹配,file,grep,pattern-matching,File,Grep,Pattern Matching,我有两个文件要比较。第一个是制表符分隔的,第二个是逗号分隔的,两者都以一个ID开头。首先,我想打印出两个文件之间匹配的所有文件。然后(如果可能的话)我想将所有不匹配的内容打印到一个单独的文件中。 这些文件如下所示: (逗号分隔) (制表符分开) 我试过了 grep -F -wf file1 file2 > incommon.txt 对于grep固定模式-仅与这些文件匹配的单词 但是我没有得到任何输出。。。 有人对我如何改进这一点有什么建议吗?我确实考虑过regex,但我对它的使用并不十分

我有两个文件要比较。第一个是制表符分隔的,第二个是逗号分隔的,两者都以一个ID开头。首先,我想打印出两个文件之间匹配的所有文件。然后(如果可能的话)我想将所有不匹配的内容打印到一个单独的文件中。 这些文件如下所示: (逗号分隔)

(制表符分开)

我试过了

grep -F -wf file1 file2 > incommon.txt
对于grep固定模式-仅与这些文件匹配的单词

但是我没有得到任何输出。。。 有人对我如何改进这一点有什么建议吗?我确实考虑过regex,但我对它的使用并不十分精通。不过我不介意使用它。

analyze.py:

import re

f = open('tab.txt', 'r')
data_tab = f.read()
f.close()

f = open('csv.txt', 'r')
data_csv = f.read()
f.close()

matches_tab = re.findall(r'^([^\t]+)', data_tab, re.M)
matches_csv = re.findall(r'^([^,]+)', data_csv, re.M)

common = set(matches_tab) & set(matches_csv)
not_common = set(matches_tab) ^ set(matches_csv)

f = open('common.txt', 'w')
for el in common:
    f.write(el)
    f.write('\n')
f.close()

f = open('not_common.txt', 'w')
for el in not_common:
    f.write(el)
    f.write('\n')
f.close()
将其保存在名为analyze.py的文件中,并使用以下命令运行脚本:

python analyze.py
将tab.txt更改为选项卡式文件名,将csv.txt更改为逗号分隔的文件名,列表应转储到工作目录中。
如果您有任何问题,请告诉我。

如果您仍想在shell中执行此操作,对于“通用”,您可以使用:

sed 's/\([^,]*\),.*/\1/' commed.txt > __ids.txt
grep -F -f __ids.txt $f tabbed.txt
rm -f __ids.txt
对于“非共同点”:

其中,“commed.txt”是以逗号分隔的文件,“tabbed.txt”是以文件选项卡分隔的文件


如果ID可能出现在第二个文件的其他位置,则此操作可能失败!如果不能将ID误认为regexp(无
\
*
,等等),那么使用“grep”的更健壮的解决方案是可能的。

机器上是否安装了python?@ChaseTheSun我不确定。。。我不是机器上的唯一用户。我该如何检查?在Linux2is上的命令提示符键入“python”或“where python”或“which python”或“find/-name python”@chasesun Yes I do.python 2.6.6(r266:84292,2012年10月12日,14:23:48)[GCC 4.4.6 20120305(Red Hat 4.4.6-4)]时,该选项工作完美。我已经有很长一段时间没有使用Python了,因为您似乎对它非常精通,我不得不问,您是否有任何首选的源代码来参考/学习/修改Python?我很高兴它工作得很好。python网站非常有帮助,事实也是如此。(我7天前才开始编写Python代码)非常感谢!我真的很感激您能给我发一个帖子,在那里可以找到regexp解决方案吗?正如我在帖子中提到的,我曾想过使用它,但不确定如何使用。但是我想学习!
python analyze.py
sed 's/\([^,]*\),.*/\1/' commed.txt > __ids.txt
grep -F -f __ids.txt $f tabbed.txt
rm -f __ids.txt
sed 's/\([^,]*\),.*/\1/' commed.txt > __ids.txt
grep -F -v -f __ids.txt $f tabbed.txt
sed 's/\([^\t]*\)\t.*/\1/' commed.txt > __ids.txt
grep -F -v -f __ids.txt $f tabbed.txt
rm -f __ids.txt