|
次のように、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
以下に提供されているBatch
、Year
およびフィールドをマージする方法は何ですか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