3つのフィールドを1つのファイルにマージするAWK 1つのライナー

3つのフィールドを1つのファイルにマージするAWK 1つのライナー

|次のように、2つのタイプのフィールド区切り文字を持つレコード(行)を含むファイルがあります!

Name|Age|Physics|Chemistry|Maths|English|Batch!Year!AdmisnNo!Grade!Score
Student1|81|65|70|80|88|EWS!2021!1001!A!75
Student2|72|63|60|50|75|EWS!2021!1002!A!85
Student3|72|63|60|50|75|EWS!2021!1002!A!85

以下に提供されているBatchYearおよびフィールドをマージする方法は何ですかAdmisnNo

簡潔さのために便利なフィールドの小さなサブセットを表示しますが、実際のファイルには関連フィールドがたくさんあります。 2〜3つのマーカーを削除したい!フィールドは最後のフィールドではなく、合計49フィールドのいずれか(6または7)のフィールドにすることができます。

Name|Age|Physics|Chemistry|Maths|English|BatchYearAdmisnNo!Grade!Score
    Student1|81|65|70|80|88|EWS20211001!A!75
    Student2|72|63|60|50|75|EWS20211002!A!85
    Student3|72|63|60|50|75|EWS20211002!A!85

懇願しますawkが、合理的な標準注文は大歓迎です。

ベストアンサー1

$ awk -F '|' 'BEGIN { OFS = FS } { sub("!", "", $NF); sub("!", "", $NF) }; 1' file
Name|Age|Physics|Chemistry|Maths|English|BatchYearAdmisnNo!Grade!Score
Student1|81|65|70|80|88|EWS20211001!A!75
Student2|72|63|60|50|75|EWS20211002!A!85
Student3|72|63|60|50|75|EWS20211002!A!85

これは、入力した最後の区切りフィールドから最初の2文字を削除するために使用されますawk!|

NFコードで任意の数値置換を使用すると、awk最後のフィールドを除く他のフィールドに影響を与える可能性があります。


最後のフィールドにのみ!文字が含まれていると仮定した場合は、次のようにしますsed

$ sed -e 's/!//' -e 's///' file
Name|Age|Physics|Chemistry|Maths|English|BatchYearAdmisnNo!Grade!Score
Student1|81|65|70|80|88|EWS20211001!A!75
Student2|72|63|60|50|75|EWS20211002!A!85
Student3|72|63|60|50|75|EWS20211002!A!85

!これにより、各行の最初の項目が削除されます。次に、2!回目の削除中にまったく同じ交換を2回目に実行します。


!各行を反転し、3行目を連続して2回削除し、結果の行を再度反転します。これにより、他の|区切りフィールドにも!文字を含めることができます。

$ rev file | sed -e 's/!//3' -e 's///3' | rev
Name|Age|Physics|Chemistry|Maths|English|BatchYearAdmisnNo!Grade!Score
Student1|81|65|70|80|88|EWS20211001!A!75
Student2|72|63|60|50|75|EWS20211002!A!85
Student3|72|63|60|50|75|EWS20211002!A!85

おすすめ記事