5

ファイルを更新するには、cron 経由で bash スクリプトを実行する必要があります。ファイルは .DAT (csv に類似) で、パイプ区切りの値が含まれています。上部にヘッダー行を挿入する必要があります。

これが私がこれまでに持っているものです:

#!/bin/bash
# Grab the file, make a backup and insert the new line
sed -i.bak 1i"red|blue|green|orange|yellow" thefilename.dat

Exit

しかし、ファイルを別のファイル名で保存して、常にfileAを取得し、編集してからfileBとして保存するにはどうすればよいですか

4

3 に答える 3

3

古いものの名前を本当に xxx.bak に変更しますか、それとも新しいコピーを保存できますか?

いずれにせよ、リダイレクトを使用してください。

sed 1i"red|blue|green|orange|yellow" thefilename.dat > newfile.dat

または、.bakも必要な場合

sed 1i"赤|青|緑|オレンジ|黄" thefilename.dat > newfile.dat \
&& mv thefilename.dat thefilename.dat.bak`

これにより、新しいファイルが作成され、sed が正常に完了した場合にのみ、orig ファイルの名前が変更されます。

于 2013-09-10T23:29:30.107 に答える
1

誰かが役に立つと思った場合に備えて、ここに私がやったことがあります....

元のファイルを取得し、新しいヘッダー行を挿入してログを作成しながら、目的のファイル タイプに変換します。

#!/bin/bash -l
####################################
#
# This script inserts a header row in the file $DAT and resaves the file in a different format
#
####################################

#CONFIG

LOGFILE="$HOME/bash-convert/log-$( date '+%b-%d-%y' ).log"
HOME="/home/rootname"

# grab original file
WKDIR="$HOME/public_html/folder1"
# new location to save
NEWDIR="$HOME/public_html/folder2"

# original file to target
DAT="$WKDIR/original.dat"

# file name and type to convert to
NEW="$NEWDIR/original-converted.csv"


####################################

# insert a new header row
HDR="header-row-1|header-row-2|header-row-2 \r"

# and update the log file
{
echo "---------------------------------------------------------" >> $LOGFILE 2>&1
echo "Timestamp: $(date "+%d-%m-%Y: %T") : Starting work" >> $LOGFILE 2>&1
touch "$LOGFILE" || { echo "Can't create logfile -- Exiting."  && exit 1  ;} >>"$LOGFILE"

# check if file is writable
sudo chmod 755 -R "$NEW"
echo "Creating file \"$NEW\", and setting permissions."
touch "$NEW"  || { 
echo "Can't create file \"$NEW\" -- Operation failed - exiting" && exit 1   ;}

} >>"$LOGFILE" 2>&1

{
echo "Prepending line \"$HDR\" to file $NEW."
{ echo "$HDR" ; cat "$DAT" ;} > "$NEW"

 {   
if [ "$?" -ne "0" ]; then
echo "Something went wrong with the file conversion."
exit 1

else echo "File conversion successful. Operation complete."
fi
}

} >>"$LOGFILE" 2>&1
exit 0
于 2013-09-11T03:28:10.227 に答える
0

「挿入」するパターンの 2 つの一重引用符の間に「i」を使用した一貫性のある構文がより明確であることがわかりました。

ヘッダーを追加するだけで、次のように別のファイルに保存できます。

sed '1i header' file > file2

あなたの場合:

sed '1i red|blue|green|orange|yellow' file > file2

同じファイルに保存したい場合は、次の-iオプションを使用します。

sed -i '1i red|blue|green|orange|yellow' file
于 2020-03-04T11:26:15.453 に答える