如果该列与其他列匹配,则删除特定字段

如果该列与其他列匹配,则删除特定字段

我有一个包含重复字段的文件。

样本文件:

ID     |Date|id     |date|name|...(up to 71 fields)
1313335|xxx |1313335|xx  |Zuan|
1677783|xxx |1677783|xx  |Zen|
11106A7|xxx |Zack   |

如果第一列与第三列匹配,则删除第三列和第四列。

输出:

ID     |Date|name|...(up to 71 fields)
1313335|xxx |Zuan|
1677783|xxx |Zen |
11106A7|xxx |Zack|

我需要你们的帮助!

答案1

假设第 1 列和第 3 列的空间量相同,则可以使用

awk -F '|' -v OFS='|' '$1==$3 { for(i = 3; i < NF-1; i++) $i = $(i+2); NF -= 2 } { print }' sample.txt

解释:

-F '|' -v OFS='|'设置输入和输出字段分隔符
$1 == $3条件:从第 3 列开始第 1 列和第 3 列相等
for(i = 3; i < NF-1; i++) $i = $(i+2);将值移至前面 2 列
NF -= 2减少列数
{ print }无条件打印该行

请注意,该脚本不会从标题中删除第 3 列和第 4 列,因为ID不等于id

相关内容