合并按键搜索的两个文件并在末尾添加

合并按键搜索的两个文件并在末尾添加

我会将两个文件中的数据合并到一个文件中,仅添加列中有趣的值。搜索关键字是第 3 列文件 #1 中的 UID。它还应该删除/省略 UID 重复项和空行(如果出现)。

阅读任何解释方法也将很高兴:)

FILE #1:
-----------------
SVCSTO1,dbsrv01,600507600C80012F4000000000000012
SVCSTO1,dbsrv01,600507600C80012F4000000000000014
SVCSTO1,dbsrv02,600507600C80012F40000000000001C0
SVCSTO1,dbsrv02,600507600C80012F40000000000001C1
SVCSTO1,dbsrv01,600507600C80012F40000000000001C2
SVCSTO1,winsrv01,600507600C80012F40000000000001C3

FILE #2:
-----------------
239,dbsrv01_01_T2,4398046511104,600507600C80012F40000000000001C2
240,winsrv01_03_T2,4398046511104,600507600C80012F40000000000001C3
10,dbsrv01_01_T0,0,8589934592000,600507600C80012F4000000000000014
237,dbsrv02_01_T1,4398046511104,600507600C80012F40000000000001C0
238,dbsrv02_02_T2,4398046511104,600507600C80012F40000000000001C1
8,dbsrv01_02_T0,8589934592000,600507600C80012F4000000000000012


DESIRED OUTPUT:
--------------------
SVCSTO1,dbsrv01,600507600C80012F4000000000000012,8589934592000,T0
SVCSTO1,dbsrv01,600507600C80012F4000000000000014,8589934592000,T0
SVCSTO1,dbsrv02,600507600C80012F40000000000001C0,4398046511104,T1
SVCSTO1,dbsrv02,600507600C80012F40000000000001C1,4398046511104,T2
SVCSTO1,dbsrv01,600507600C80012F40000000000001C2,4398046511104,T2
SVCSTO1,winsrv01,600507600C80012F40000000000001C3,4398046511104,T2

我能够像下面的示例一样操作数据输出,但没有经验如何构建数组或将多个输出合并为一个:(

# for i in `cat file1.log | awk -F"," '{print $3}'` ; do cat file2.log | grep $i | awk -F"," '{print $3/1024^3" GB"}'; done
8000 GB
...

答案1

这只sed会将您的输入转换为给定的输出。您可以根据需要扩展它:

sed -E '/^[0-9]/{s/.*_(.*)(,.*),(.*)/\3\2,\1/;H;d;};G;s/,(.*)\n.*\n\1(,[0-9]*,T[0-9]*).*/\1\2/' file2 file1

此类任务的想法始终相同:首先读取第二个文件以在保留空间中构建查找表,然后将此查找表附加到主文件的每一行。

详细地:

  • 该模式/^[0-9]/寻址以数字开头的行,因此 中的所有内容都仅{}执行file2
  • s/.*_(.*)(,.*),(.*)/\3\2,\1/从第二个文件中仅提取我们需要的部分,并且已经按照所需的顺序
  • H;d将其附加到保留空间中的查找表并丢弃该行。其他处理file1仅用于
  • G追加查找表并s/,(.*)\n.*\n\1(,[0-9]*,T[0-9]*).*/\1\2/查找键(在,和换行符之间)作为\1查找表中的反向引用以追加表中的字段

答案2

还通过 AWK 找到了其他方法来解决这个问题,并且正在为我工​​作。

awk -F"," 'FNR==NR{a[$4]=$3 FS $2;next}{ print $0","a[$3]}' file1 file2

相关内容