Unix 为行合并文件行错误
我有两个相同长度的文件,我想每行合并一行。以下是我的文件,例如: FileA.txtUnix 为行合并文件行错误,unix,paste,Unix,Paste,我有两个相同长度的文件,我想每行合并一行。以下是我的文件,例如: FileA.txt DM CM127861 chr14 103390285 + NM_030943 AMN Megaloblasticanaemia1 DM CM118934 chr14 103395855 + NM_030943 AMN Megaloblasticanaemia1 DM CM127864 chr14 103395992 + NM_03
DM CM127861 chr14 103390285 + NM_030943 AMN Megaloblasticanaemia1
DM CM118934 chr14 103395855 + NM_030943 AMN Megaloblasticanaemia1
DM CM127864 chr14 103395992 + NM_030943 AMN Megaloblasticanaemia1
DM CM088131 chr14 103395814 + NM_030943 AMN Megaloblasticanaemia1
DM CM124403 chr14 103395776 + NM_030943 AMN Imerslund-Gr‰sbecksyndrome
DM CM002932 chr1 115220593 - NM_000036 AMPD1 Adenosinemonophosphatedeaminasedeficiency
etc
FileB.txt
TGT C TAT Y
ATG M AAG K
CAG Q GAG E
CCG P TCG S
CCG P CTG L
GCG A GTG V
我希望我的最终输出是:
DM CM127861 chr14 103390285 + NM_030943 AMN Megaloblasticanaemia1 TGT C TAT Y
etc
为了做到这一点,我一直在使用这个粘贴命令:paste-d'\t'FileA.txt FileB.txt>combined.txt
,但是,我不断地收到这个错误读取FileA.txt时出错。我很确定这与我的%
符号有关。我试图将文件中的所有%更改为另一个字符,但它遇到了另一个无法处理的字符。我很确定它会在我的整个文件中不断遇到这些错误,因为它有一些不寻常的字符。当出现一些不寻常的字符时,是否有其他方法逐行合并文件
ls-l用于以下两个文件:
-rw-r--@1 christy staff 4811597 Aug 27 14:18 Translated.txt
-rw-r--r--1 christy staff 846004 Aug 27 14:18 Translated2.txt
有些事你没有告诉我们。例如,这样做没有问题:
$ paste FileA.txt FileB.txt
Syndrome ATG Y
Syndrome% AGT K
如果您得到一个“读取FileA.txt时出错”,则更多地表明该文件可能不存在或您没有读取权限。什么是
ls -l *.txt
说什么?您是否碰巧不知道Unix在文件名中区分大小写
编辑:可能与扩展属性相关。你可以把它们列在一起
$ xattr -l FileA.txt
或
由于根据医生的姓名判断,文件中的“有趣”字符应该是a-umlaut,如Imerslund Gräsbeck中所述,因此可能与编码有关。如果ls-l@
显示类似com.apple.textcodencing
的内容,请尝试使用删除该属性
$ xattr -d com.apple.TextEncoding FileA.txt
如果出现其他属性,如com.apple.quantial
,请同时删除它们。我无法根据问题中包含的数据复制您遇到的问题,因此。。。这里有一个基于awk的选项,可以替代粘贴
awk '{getline B < "fileB.txt"; print $0 "\t" B;}' fileA.txt > combined.txt
因为它不需要将所有一个文件加载到内存中。当然,如果您有足够的内存,一次读取一个文件可能比逐行读取每个文件运行得更快。如果成功,结果应该是相同的。您能尝试查找更多信息吗<代码>ls-l
如@Jens所建议cat FileA.txt FileB.txt
查看问题是否是特定于粘贴的,paste-d'\t'FileB.txt FileB.txt
查看问题是否是特定于FileA.txt的。@WalterA我用ls-l
更新了我的帖子,cat
工作正常。当我在复制的文件上尝试你的命令时,我没有看到错误,粘贴成功。您的问题中是否有可能包含足够的原材料,以使问题得以复制?可能Translated.txt较短或具有一些非常特殊的字符。使用较小子集的调试的wc-l Translated*.txt
检查长度:head-10 Translated.txt>a;head-10 Translated2.txt>b;粘贴-d'\t'a b
。当这起作用时,尝试更多行(1005003000),直到您知道问题出在哪里:while[1];一定要读nr_行;head-${nr_lines}Translated.txt>a;head-${nr_lines}Translated2.txt>b;粘贴-d'\t'a b|tail-5;完成
这是在配备IOS的Apple上完成的吗?文件名绝对不区分大小写,因为它将输出文件,最多可输出指定字符,但随后将停止合并。当我删除我认为导致问题的字符时,它会合并更多的行,直到它碰到另一个导致问题的字符。我的文件有点复杂,所以我没有发布我文件的精确摘录,但也许我应该这么做。我已经用我的博客上的一个确切例子更新了我的帖子file@christylynn002ls输出中的@
是什么意思?manls
描述了它的解释吗?@christylynn002我做了一些研究;@
表示可使用ls-le*.txt
列出的扩展属性。另一个猜测是:您的磁盘空间是否用完了?这一操作非常有效。我不知道为什么我不能让浆糊起作用。谢谢你。现在我没有陷入困境:)
awk '{getline B < "fileB.txt"; print $0 "\t" B;}' fileA.txt > combined.txt
awk 'NR==FNR{a[NR]=$0;next;} {print $0 "\t" a[FNR];}' fileB.txt fileA.txt