好吧,根据每个文件共享的第一列,我有大约114个文件,我想要并排加入,这是ID号。每个文件由2列和400,000行组成。我使用write.table
将这些表连接在一个表中,然后我在标题中得到了X.例如,我的标题应该是:
ID 1_sample1 2_sample2 3_sample3
但我明白这样:
ID X1_sample1 X2_sample2 X3_sample3
我读到了这个问题并发现check.names
摆脱了这个问题,但在我使用check.names
的情况下,我收到以下错误:
“未使用的参数(check.name = F)”
因此,我决定使用sed来解决这个问题,它确实很有效,但它加入了第二行和第一行。例如,我的第一列和第二列应该是这样的:
ID 1_sample1 2_sample2 3_sample
cg123 .0235 2.156 -5.546
但我得到以下内容:
ID 1_sample1 2_sample2 3_sample cg123 .0235 2.156 -5.546
任何人都可以帮我查一下这段代码。我可能做错了,不让每一条线与另一条线分开。
head -n 1 inFILE | tr "\t" "\n" | sed -e 's/^X//g' | sed -e 's/\./-/' | sed -e 's/\./(/' |sed -e 's/\./)/' | tr "\n" "\t" > outFILE
tail -n +2 beta.norm.txt >> outFILE
答案 0 :(得分:1)
如果您的数据是制表符分隔的,那么简单的修复就是
sed '1,1s/\tX/\t/g' < inputfile > outputfile
1,1 only operate on the range "line 1 to line 1"
\tX find tab followed by X
/\t/ replace with tab
g all occurrences
看起来好像你的原始尝试不只是剥离X - 它也会将连续的点更改为(-)
,但是你没有在你的例子中显示为什么你需要它。您的代码加入前两行的原因是您只在最后一个\n
命令中将\t
替换为tr
- 这样您就不会在\n
结束时使用\n
线。
在使用第二个命令连接第2行和第2行之前,需要在第一行末尾附加head -n 1 inFILE | tr "\t" "\n" | sed -e 's/^X//g' | sed -e 's/\./-/' | sed -e 's/\./(/' |sed -e 's/\./)/' | tr "\n" "\t" > outFILE
echo "\n" >> outFile
tail -n +2 beta.norm.txt >> outFILE
。试用
awk
是否有效取决于您的操作系统。还有其他方法可以添加换行符......
使用awk '(NR==1){gsub(" X"," ", $0);}{print;}' inputFile > outputFile
编辑可能更清晰 - 例如
(NR==1) for the first line only (record number == 1) do:
{gsub(" X","", $0);} do a global substitution of "space followed by X", with "space"
for all lines (including the one that was just modified) do:
{print;}' print the whole line
说明:
{{1}}