入力ファイルの内容は次のとおりです。
header;header;header;header
2018/06/04;141000;bla;bla
希望の出力:
header;header;header;header
2018/06/04;1410;bla;bla
次のコマンドがありますsed
sed -i 's/.//16' $inputFile
しかし、次のように私のタイトルを削除します。
header;hder;header;header
2018/06/04;1410;bla;bla
これを防ぐために、以下を試しました。
tail -n +2 | sed -i 's/.//16' $inputFile
しかし、うまくいきません。事前にありがとう
答え1
使用awk
:
awk -F ';' -v OFS=';' 'NR > 1 { sub("..$", "", $2) }; 1' <"$inputFile"
;
これにより、最後の2文字が削除され、最初の行を除くすべての入力行の2番目の区切りフィールドが変更されます。
末尾を使用すると、各行1
が出力されます(交換可能{ print }
)。
出力を新しいファイルにリダイレクトでき、後で元のファイルを置き換えることができます。
答え2
2番目の区切り文字の前にある2つの文字を削除するには(たとえば、最初の2つの区切り文字の前に常に少なくとも2つの文字があるとします)、次のようにします。
sed -i -- '1!s/..;/;/2' "$inputFile"
1!
タイトル(最初)の行を変更しないでください。
残りは区切り文字の前の2文字を削除します;
。