macos - 在 Mac 上的排序文件中的模式之前插入列分隔符

标签 macos unix multiple-columns


拥有一个包含来自不同 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 表示打印当前行`"

如果你不经常使用awkNF指的是字段的数量,$0指的是整个当前行,$1 指该行的第一个字段,$2 指第二个字段,依此类推。

关于macos - 在 Mac 上的排序文件中的模式之前插入列分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38715540/

相关文章:

macos - 如何在我的新 MacBook Pro(配备 Mac OS Catalina)上安装 openMP?

objective-c - 使用辅助功能 API 在 Mac OS X 上移动其他窗口

macos - 如何在 osx 上的/dev 中找到键盘

macos - Qt创建者: How to add new theme styles?

linux - 使用linux删除csv文件中的重复项并根据时间戳获取最新数据

linux - Bash 读/写文件描述符——寻找文件的开始

Python Pandas : converting several boolean columns into a (possibly repeated) column made up of the boolean column names

css - Bootstrap : Trying to get 3 column layout but social icons don't want to jump up to the top line

unix - 如果某行包含指定列中的单词,则提取该行

c - 为什么我的父进程没有等待第二次? C/Unix