gpt4 book ai didi

linux - grep 两个文件之间

转载 作者:太空宇宙 更新时间:2023-11-04 04:45:51 26 4
gpt4 key购买 nike

我想在文件 2 中找到与文件 1 相比的匹配行。

file2 包含多个列,第一列包含可能与 file1 匹配的信息。

我尝试了以下命令,但没有给出任何匹配结果(file1 中的内容肯定在 file2 中)。我之前使用过这些命令来比较不同的文件,并且它们有效。

grep -f file1 file2
grep -Fwf file1 file2

当我尝试 grep 任何不匹配的内容时,我得到结果

grep -vf file1 file2 

file1 包含基因列表(754 个基因),每行一行

ATM
ATP5B
ATR
ATRIP
ATRX

我感觉问题出在我的 file1 上。当我尝试在 file1 中手动键入几个项目以进行测试,并使用 file2 执行 grep 时,我从 file2 中获得了匹配的行。

当我将 file1 的内容(最初在 Excel 中)复制到记事本中制作 .txt 文件时,我没有得到任何匹配的结果。

我看不出我的 file1 有任何问题。有什么建议吗?

最佳答案

你说,

I copied the contents of file1 (originally in excel) into notepad making a .txt file

txt 文件可能包含回车符/换行符对,这会搞乱 grep。正如我在评论中建议的那样,试试这个:

tr -d '\015' < file1 > file1a
grep -Fwf file1a file2

tr 调用会删除所有回车符,为您提供一个正确的 Unix/Linux 文本文件,仅将换行符 (\n) 作为行终止符。

<小时/>

你说:

I can't see any problem with my file1.

查看额外回车问题的方法如下:

cat -v test1

每行末尾的那些小^M标记是cat -v向您显示回车控制代码的方式。

<小时/>

附录:
回车符 (CR) 在 C 语言中为十进制 13、十六进制 0x0d、八进制 015、\r
换行符 (LF) 在 C 中是十进制 10、十六进制 0x0a、八进制 012、\n
因为它是一个老式实用程序,所以 tr 接受八进制(基数 8)控制字符表示法。
(我认为在某些版本中 tr -d '\r' 可以工作,但我不确定,而且我不确定您拥有什么版本。tr -d '\015' 应该是通用的。)

关于linux - grep 两个文件之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37127398/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com