File 在unix中合并/追加文件并重新编号第一列

File 在unix中合并/追加文件并重新编号第一列,file,unix,sed,awk,File,Unix,Sed,Awk,我在不同的目录(3个不同的名称)中有许多(仅举3个例子)文本文件,如下所示: 目录:A,文件名:run.txt格式:txt制表符删除 ; file one 10 0.2 0.5 0.3 20 0.1 0.6 0.8 30 0.2 0.1 0.1 40 0.1 0.5 0.3 ; file two 10 0.2 0.1 0.2 30 0.1 0.6 0.8 50 0.2 0.1 0

我在不同的目录(3个不同的名称)中有许多(仅举3个例子)文本文件,如下所示:

目录:A,文件名:run.txt格式:txt制表符删除

; file one 
10     0.2   0.5   0.3
20     0.1   0.6   0.8
30     0.2   0.1   0.1
40     0.1   0.5   0.3
; file two 
10     0.2   0.1   0.2
30     0.1   0.6   0.8
50     0.2   0.1   0.1
70     0.3   0.4   0.4
; file three 
10     0.3   0.3   0.3
20     0.3   0.6   0.8
30     0.1   0.1   0.1
40     0.2   0.2   0.3
目录:B,文件名:run.txt格式:txt制表符删除

; file one 
10     0.2   0.5   0.3
20     0.1   0.6   0.8
30     0.2   0.1   0.1
40     0.1   0.5   0.3
; file two 
10     0.2   0.1   0.2
30     0.1   0.6   0.8
50     0.2   0.1   0.1
70     0.3   0.4   0.4
; file three 
10     0.3   0.3   0.3
20     0.3   0.6   0.8
30     0.1   0.1   0.1
40     0.2   0.2   0.3
目录:C,文件名:run.txt格式:txt制表符删除

; file one 
10     0.2   0.5   0.3
20     0.1   0.6   0.8
30     0.2   0.1   0.1
40     0.1   0.5   0.3
; file two 
10     0.2   0.1   0.2
30     0.1   0.6   0.8
50     0.2   0.1   0.1
70     0.3   0.4   0.4
; file three 
10     0.3   0.3   0.3
20     0.3   0.6   0.8
30     0.1   0.1   0.1
40     0.2   0.2   0.3
我想将所有三个run.txt文件合并成一个文件,并对第一列重新编号。生成的新文件如下所示:

; file combined 
10     0.2   0.5   0.3
20     0.1   0.6   0.8
30     0.2   0.1   0.1
40     0.1   0.5   0.3

50     0.2   0.1   0.2
70     0.1   0.6   0.8
90     0.2   0.1   0.1
110    0.3   0.4   0.4

120    0.3   0.3   0.3
130    0.3   0.6   0.8
140    0.1   0.1   0.1
150    0.2   0.2   0.3
这是我的代码所在的位置:

cat A/run.txt B/run.txt C/run.txt > combined.txt
(1) 我不知道如何按第一列重新编号

(2) 我也不知道如何处理以“;”开头的评论

编辑:

让我澄清一下数字方案: A/run.txt、B/run.txt和C/run.txt实际上是并行运行的,它们组合在一起。 因此,每个都将存储带有运行编号的样本。但是,在跑步过程中,差距可能是不均匀的

(1) 对于第一个文件A/run.txt(间隙为10,20-10,30-20)

(2) 对于第二个文件B/run.txt,从10开始,但间隔为20 (例如30-10、50-70、70-50)

(3) 文件C/run.txt从10开始,增量为10

110 (last number in file 2) + 10 = 120, 120+ 10 = 130,
 130+10 = 140, 140+10 = 150`

您可以使用
awk

  awk 'BEGIN{l=0;print "; file combined"}; {if($1!=";")print l,$2,$3,$4;l=l+10}'  A/run.txt B/run.txt C/run.txt > combined.txt
编辑

我猜测了一下您的编号方案(您仍然没有提供规范),并得出以下结论:

  awk 'BEGIN{line=0;last=0;print "; file combined"}; !/^;/{if($1<last){line=last+$1}else{line=line+$1-last;last=$1};print line,$2,$3,$4}' \
  A/run.txt B/run.txt C/run.txt > combined.txt

awk'开始{line=0;last=0;打印“文件组合”};!/^/{如果($1这可能适合您:

awk -F'[\t]' 'lastfile!=FILENAME{lastfile=FILENAME;i=l};{$1+=i;l=$1};1' A/run.txt B/run.txt C/run.txt > combined.txt
要运行它,请执行以下操作:

$ ./renumber {A,B,C}/run.txt

给定您的样本输入,它会生成与您的样本完全匹配的输出。

编号方案不清楚。为什么不存在数字80或数字100?谢谢,这是我的错。.数据集之间的数字相加,但间隔可能不同-错误已更正感谢回复…我得到的se值不同cond文件,因为这是不同的间隔20而不是10…否则再次完善,解释你想要的编号方案。上面的代码只是增加10。再次抱歉,我的错误,虽然我有上述较小的数据集正确,但组合错误。我纠正了非常好的作品,有可能消除组合文件中文件之间的间隙吗,我只是为了清楚起见,我试着应用所有目录(可能会有x个目录与./renumber.txt{*}/run.txt一起使用,但不起作用……你对此有什么建议吗?。@hijo:删除星号周围的大括号。你只在构建列表时使用它们(例如)。所以它应该是
/renumber.txt*/run.txt