awk在文件1的序列中找到丢失的数字,并将其追加到文件2中的列



hi正如前一个问题中所建议的,我将尝试更多地阐明我想要实现的目标。与文件1中一样,在第4列中,我有一些数字不是连续排序的,比如1,2,3,4,5..,这意味着我需要打印那些缺失的,例如在3号之后,我应该在上得到4号等等

cat文件1

A R5 A48 1
B R5 A48 2
C R4 A48 3
D R8 A48 15
E R9 A48 22
F R20 B55 21
G R55 B22 19
R B1 I77 14
AA B8 PP 18
BX A255 PA 7
CA A77 PB 10
WW W7 PX 11

我在这架返回的飞机上找到了部分解决方案

arr=($(awk '{ print $4 }' file1 )) | printf '%sn' ${arr[*]}| 
awk -v first=1 -v last=23 ' BEGIN {for(i=first; i<=last; i++) array[i] = 1} 
{for(i=1;i<=NF;i++) array[$i] += 1} END {for (num in array) if (array[num] == 0) print num}'
4
5
6
8
9
12
13
16
17
20
23

这就是我想要的,但我仍然错过了打印23号之后到31号的剩余数字,并根据文件2的行数/行数将其粘贴为列$3(3号(

cat文件2

md5sum 25d422cc23b44c3bbd7a66c76d52af46 
md5sum 25d422cc23b44c3bbd7a66c76d52af47 
md5sum 25d422cc23b44c3bbd7a66c76d52af48 
md5sum 25d422cc23b44c3bbd7a66c76d52af41 
md5sum 25d422cc23b44c3bbd7a66c76d52af22 
md5sum 25d422cc23b44c3bbd7a66c76d52af33 
md5sum 25d422cc23b44c3bbd7a66c76d52af12 
md5sum 25d422cc23b44c3bbd7a66c76d52af01 
md5sum 25d422cc23b44c3bbd7a66c76d52af55 
md5sum 25d422cc23b44c3bbd7a66c76d52af14 
md5sum 25d422cc23b44c3bbd7a66c76d52af18 
md5sum 25d422cc23b44c3bbd7a66c76d52af17 
md5sum 25d422cc23b44c3bbd7a66c76d52af77 
md5sum 25d422cc23b44c3bbd7a66c76d52af06 
md5sum 25d422cc23b44c3bbd7a66c76d52af05 
md5sum 25d422cc23b44c3bbd7a66c76d52af72 
md5sum 25d422cc23b44c3bbd7a66c76d52af73 
md5sum 25d422cc23b44c3bbd7a66c76d52af74 
md5sum 25d422cc23b44c3bbd7a66c76d52af75 
md5sum 25d422cc23b44c3bbd7a66c76d52af76 

导致

md5sum 25d422cc23b44c3bbd7a66c76d52af46 4
md5sum 25d422cc23b44c3bbd7a66c76d52af47 5
md5sum 25d422cc23b44c3bbd7a66c76d52af48 6
md5sum 25d422cc23b44c3bbd7a66c76d52af41 8
md5sum 25d422cc23b44c3bbd7a66c76d52af22 9
md5sum 25d422cc23b44c3bbd7a66c76d52af33 12
md5sum 25d422cc23b44c3bbd7a66c76d52af12 13
md5sum 25d422cc23b44c3bbd7a66c76d52af01 16
md5sum 25d422cc23b44c3bbd7a66c76d52af55 17
md5sum 25d422cc23b44c3bbd7a66c76d52af14 19
md5sum 25d422cc23b44c3bbd7a66c76d52af18 20
md5sum 25d422cc23b44c3bbd7a66c76d52af17 23
md5sum 25d422cc23b44c3bbd7a66c76d52af77 24
md5sum 25d422cc23b44c3bbd7a66c76d52af06 25
md5sum 25d422cc23b44c3bbd7a66c76d52af05 26
md5sum 25d422cc23b44c3bbd7a66c76d52af72 27
md5sum 25d422cc23b44c3bbd7a66c76d52af73 28
md5sum 25d422cc23b44c3bbd7a66c76d52af74 29
md5sum 25d422cc23b44c3bbd7a66c76d52af75 30
md5sum 25d422cc23b44c3bbd7a66c76d52af76 31

例如,如果下一个文件2将有22行/行,则它将添加数字直到32,例如

我认为应该用更好的方法来完成,将file1列$4中的数字也放入数组中,并重新映射逻辑

awk前往救援!无需在脚本中插入bashawk是一种成熟的编程语言,尤其适用于文本处理。

$ awk 'NR==FNR{a[$NF]; next} {while(++c in a); print $0, c}' file1 file2
md5sum 25d422cc23b44c3bbd7a66c76d52af46  4
md5sum 25d422cc23b44c3bbd7a66c76d52af47  5
md5sum 25d422cc23b44c3bbd7a66c76d52af48  6
md5sum 25d422cc23b44c3bbd7a66c76d52af41  8
md5sum 25d422cc23b44c3bbd7a66c76d52af22  9
md5sum 25d422cc23b44c3bbd7a66c76d52af33  12
md5sum 25d422cc23b44c3bbd7a66c76d52af12  13
md5sum 25d422cc23b44c3bbd7a66c76d52af01  16
md5sum 25d422cc23b44c3bbd7a66c76d52af55  17
md5sum 25d422cc23b44c3bbd7a66c76d52af14  20
md5sum 25d422cc23b44c3bbd7a66c76d52af18  23
md5sum 25d422cc23b44c3bbd7a66c76d52af17  24
md5sum 25d422cc23b44c3bbd7a66c76d52af77  25
md5sum 25d422cc23b44c3bbd7a66c76d52af06  26
md5sum 25d422cc23b44c3bbd7a66c76d52af05  27
md5sum 25d422cc23b44c3bbd7a66c76d52af72  28
md5sum 25d422cc23b44c3bbd7a66c76d52af73  29
md5sum 25d422cc23b44c3bbd7a66c76d52af74  30
md5sum 25d422cc23b44c3bbd7a66c76d52af75  31
md5sum 25d422cc23b44c3bbd7a66c76d52af76  32

请注意,19在您的第一个文件中,因此它在输出中被跳过。您的输出与给定输入的规范不一致。

最新更新