0

うまくいけば、これはそこにいる誰かにとって簡単な質問です. 何を使用する必要があるかはかなりわかっていますが、それを機能させる方法がわかりません。問題は次のとおりです。

フラットファイルデータベースがあります。それをfile.dbと呼びましょう

file.db のサンプル行を次に示します。

#file.db
#
line1|example|sample|name|flag|blah
line2|example|sample|name|flag|blah
line3|example|sample|name|flag|blah

基本的に、スクリプトは tar ファイルの MD5 ハッシュを計算します。tar ファイルのハッシュ = 1234abcd としましょう

MD5 サムと別のセパレータ (|) を file.db の特定の行に追加する必要があります

例えば:

#file.db
#
line1|example|sample|name|flag|blah
line2|example|sample|name|flag|blah|1234abcd
line3|example|sample|name|flag|blah

追加される行は、もちろん変数によって制御されます。sed と awk を使用してみましたが、構文がわかりません。

アップデート

みんなありがとう、今すぐ解決策を持ってください。これが私がやったことです:

HASH=`md5sum tmp/$URL.tgz | awk '{ print $1 }'`
DBLINE=5
awk -v OFS="|" -v l="$DBLINE" -v h="$HASH" 'NR==l{print $0,h;next}1' databases/$WEB > /tmp/$WEB.tmp && mv /tmp/$WEB.tmp databases/$WEB

ケント、そして答えてくれた他のみんなに感謝します。

4

4 に答える 4

1
line=2
awk -v line="$line" 'FNR==line {printf("%s%s\n" $0, "|123abcd") ;next}
                     {print $0}' infile > newfile
于 2013-04-15T09:35:45.063 に答える
0
set LN = 5
set MS = 1234abcd
sed -i.bak $LN's/$/|'$MS'/' file.db

これは動作するはずです +

于 2013-04-15T10:12:02.833 に答える