トレーラーにチェックサム値を追加する

トレーラーにチェックサム値を追加する

ファイルのトレーラーレコードにSHA256チェックサムハッシュを追加したいと思います。

file1.txt

H this is a test 
D 1
D 2
D 3
T checksum

64ビット英数字ハッシュ値を取得するには、次のコマンドを使用します。

sha256sum file1.txt >file2.txt

file2.txt

<64digituniquealphanumvalue> file1.txt

私の予想される出力ファイルは次のとおりです

file3.txt

H this is a test
D 1
D 2
D 3
T checksum <64digituniquealphanum>

しかし、次のコマンドを使用して次の出力を取得しました。

cat file1.txt file2.txt > file3.txt

file3.txt

H this is a test
D 1
D 2
D 3
T checksum
<64digituniquealphanum> file1.txt

file1新しい行があり、私の要件は、予期されるファイル形式で指定されたファイル名を持たないunixファイルの最後の行であるTレコードタイプに64ビットの一意のチェックサムハッシュ値を追加することです。 Unixで実装する方法を教えてください。

答え1

sed "s/^T checksum$/& $(sha256sum file1.txt | awk '{print $1}')/" file1.txt

このsedコマンドは、「Tチェックサム」file1.txtと空白、sha256ダイジェストのみを含む行と一致しますfile1.txt

あなたのものが与えられると、次のようにfile1.txt出力されます。

H this is a test
D 1
D 2
D 3
T checksum 521967963f10f7f980c96ee7dfc832035d5fff252b134958add8a323023364d5

"Tチェックサム"行file1.txt何もないそれ以外の場合(たとえば、余分なスペースなど)、パターンと一致せ^T checksum$ず、何も追加されません。

答え2

sed " "コマンドはeすべてのバージョンでは使用できません。ここではLinuxで使用されますsed (GNU sed) 4.7。試してみてください。

sed -e '$ { h;s/.*/sha256sum file/; e ' -e '; s/ .*$//; H; x; s/\n/ /}' file
H this is a test 
D 1
D 2
D 3
T checksum 0ad6aaad4fea8e27b8c270191a43e1f8f12113e7b9dc34fecd7fcee053b42604

最後の行は、スペースを節約するために保存された次のsha256sum入力ファイルで実行され、スペースを節約するために追加され、次にパターンスペースに置き換えられ、<NL>文字が削除され印刷されます。

ファイルに追加すると、将来のチェックサム検証は失敗します。

可能file2であれば試してみてください。

sed '1{s/ .*$//; h; d; }; ${G; s/\n/ /}' file2 file1

関連情報