ファイルの列が最後にある場合は、カンマを削除します。

ファイルの列が最後にある場合は、カンマを削除します。

19列のタブで区切られたファイルがあり、その一部にはカンマが含まれています。このカンマが最後にある場合は、すべての列から削除したいと思います。例:

c1   c2   c3   c4   c5  
re,  f,f   d,f,  gf   mk
df   df,  df   dl,  df,

結果は次のファイルに保存する必要があります。

c1   c2    c3    c4   c5  
re   f,f   d,f   gf   mk
df   df    df    dl   df

答え1

次のことができます。

perl -i -pe 's/,(\t|$)/$1/g' file

これにより、カンマの後にスペース、タブ、改行文字が削除されます。

たとえば、他のフィールド区切り文字の場合は、次のようにします:

perl -i -F: -lane 's/,$// for @F; print join ":",@F' file

このコマンドはソースファイルを変更します、まず削除して-iテストしてみてください。

答え2

各フィールドの末尾にある単一のカンマを削除するには、次の手順を実行します。

perl -i -pe 's/,(\t|$)/$1/g' myfile

(\t|$)タブ文字または行末と一致します。s/…/…/gパターンの各発生(here ,(\t|$))を、指定された代替テキスト(here $1、パターンの角かっこで囲まれた部分を表す)に置き換えます。カンマで終わらないフィールドはパターンと一致しないため、変更せずに印刷されます。

これ-pオプションPerlに与えられた式を各入力行に適用し、変更された行を印刷するように指示します。これ-iオプション入力ファイルが結果出力に置き換えられます。

答え3

以下は素晴らしいツアーコンテンツです。

perl -i -pe 's/,(?=\t|$)//g' file

または

perl -i -pe 's/,(?!\S)//g' file

または

単語ではなく境界を使用してください。

perl -i -pe 's/,\B//g' file

関連情報