拥有一个包含来自不同 XML 文件的值的结果文件。
该文件有 5 列,以“;”分隔如果所有模式都匹配。
第一列 = 中性指数
第二列=特定索引1
第三列 = 文件确实包含 Index1
第四列=特定索引2
第五列 = 文件确实包含 Index2
与 Index2 不匹配的模式(如最后三行)也应有 5 列,而最后两列应与前两行类似。
排序后的文件如下所示:
AAA;AAA.1D1;file_X;AAA.2D1;file_Y
AAA;AAA.1E1;file_A;AAA.2E1;file_B
AAA;AAA.2F1;file_C
BBB;BBB.2G1;file_D
CCC;CCC.1B1;file_H
YYY;YYY.2M1;file_N
期望的结果是:
AAA;AAA.1D1;file_X;AAA.2D1;file_Y
AAA;AAA.1E1;file_A;AAA.2E1;file_B
AAA;;;AAA.2F1;file_C
BBB;;;BBB.2G1;file_D
CCC;CCC.1B1;file_H;;
YYY;;;YYY.2M1;file_N
如果您有任何想法/提示,我们非常感谢您的帮助!提前致谢!
最佳答案
更新答案
根据更新的要求,我认为您想要这样的东西:
awk -F';' 'NF==3 && $2~/\.1/{$0=$0 ";;"}
NF==3 && $2~/\.2/{$0=$1 ";;;" $2 ";" $3} 1' file
可以写成一行:
awk -F';' 'NF==3 && $2~/\.1/{$0=$0 ";;"} NF==3 && $2~/\.2/{$0=$1 ";;;" $2 ";" $3} 1' YourFile
原始答案
我会用awk
来做到这一点:
awk -F';' 'NF==3{$0=$1 ";;;" $2 ";" $3}1' YourFile
AAA;AAA.1D1;file_X;AAA.2D1;file_Y
AAA;AAA.1E1;file_A;AAA.2E1;file_B
AAA;;;AAA.2F1;file_C
BBB;;;BBB.2G1;file_D
YYY;;;YYY.2M1;file_N
这就是说...“使用 ';'
作为字段分隔符在 YourFile
上运行 awk
。如果只有 3 个任何行上的字段,使用现有的第一个字段、三个分号和其他两个字段重新创建该行。末尾的 1
表示打印当前行`"。
如果你不经常使用awk
,NF
指的是字段的数量,$0
指的是整个当前行,$1
指该行的第一个字段,$2
指第二个字段,依此类推。
关于macos - 在 Mac 上的排序文件中的模式之前插入列分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38715540/