ファイルのトレーラーレコードに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