我有以下文件
档案A
Kmax Event File - Text Format
1 6 1000
1 4143 9256 13645 16426 20490
49 4144 8820 14751 16529 20505
45 4146 8308 12303 16912 22715
75 4139 9049 14408 16447 20480
23 4137 8449 13223 16511 20498
22 4142 8795 14955 16615 20493
档案B
Kmax Event File - Text Format
1 6 1000
42 4143 9203 13401 16475 20480
44 4140 8251 12302 16932 21872
849 6283 8455 12301 16415 20673
18 4148 8238 12757 16597 20484
19 4144 8268 12306 17110 21868
50 4134 8331 12663 16501 20606
988 5682 8296 12306 16577 20592
61 4147 8330 12307 16945 22497
0 4138 8333 12310 16871 22749
文件C ,文件D ,...以及所有这些文件具有完全相同的格式。此外,每个文件的文件名如下:run
,run%1
,run%2
,run%3
,run%4
等。文件编号甚至可以达到到了30,run%30
就是。
我想做的是按以下方式合并文件
Kmax Event File - Text Format
1 6 1000
1 4143 9256 13645 16426 20490
49 4144 8820 14751 16529 20505
45 4146 8308 12303 16912 22715
75 4139 9049 14408 16447 20480
23 4137 8449 13223 16511 20498
22 4142 8795 14955 16615 2049
42 4143 9203 13401 16475 20480
44 4140 8251 12302 16932 21872
849 6283 8455 12301 16415 20673
18 4148 8238 12757 16597 20484
19 4144 8268 12306 17110 21868
50 4134 8331 12663 16501 20606
988 5682 8296 12306 16577 20592
61 4147 8330 12307 16945 22497
0 4138 8333 12310 16871 22749
我相信我可以使用
来做到这一点awk '{i=$1;sub(i,x);A[i]=A[i]$0} FILENAME==ARGV[ARGC-1]{print i A[i]}'
但是以这种方式将存在第二个文件的两个第一行。另外我不知道上面这行是否有效。问题是我需要同时合并多个文件。有没有想要合并那些几乎相同的文件?
答案 0 :(得分:1)
您可以使用cat
和tail
:
cat A > C && tail -n +3 B >> C
这会将文件A和B合并到一个名为C的新文件中。
使用awk
:
awk 'FNR==NR{print; next} FNR>2' A B > C
如果要合并多个文件,可以在awk版本的A B
旁边列出,例如A B D
。 awk版本中的C
是包含合并数据的输出文件。
在cat
和tail
版本中,您可以重复其他文件的tail
部分代码,例如
cat A > C && tail -n +3 B >> C && tail -n +3 D >> C
或创建某种循环来迭代文件。
答案 1 :(得分:1)
在shell中使用分组括号
{ cat run; sed '1,2d' run%*; } > c
答案 2 :(得分:0)
打印第一个文件中的所有行(NR == FNR),只打印第3行,然后打开其余文件(FNR> 2):
awk 'NR==FNR||FNR>2' run*