列が他の列と一致する場合は、特定のフィールドを削除します。

列が他の列と一致する場合は、特定のフィールドを削除します。

繰り返しフィールドがあるファイルがあります。

サンプルファイル:

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

最初の列が3番目の列と一致する場合は、3番目と4番目の列を削除します。

出力:

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

おすすめ記事