読みやすいスクリプトを作成しようとしています。ファイル名、区切り記号そしてフィールド番号。次に、各行に入力を入力してフィールドを置き換えます(フィールド番号) 同じファイルに出力します。
たとえば、入力が次のような場合:
1992年。 釈迦モニーF;
コマンドのため
bash_script.sh test.csv ";" 3
入力すると各行を繰り返します。1994年1位は1995年、2位は1995年だ。以下の出力を同じファイルに保存したいと思います。
1994年。 サキア; 1995
これまで私はこれをしました:
#!/usr/bin/env bash
echo "Following is the input needed:";
echo "\$1: FILE_NAME";
echo "\$2: DELIMITER";
echo "\$3: FIELD IN NUMERIC VALUE";
gawk -i inplace -F "$2" '{...}' $1;
また、私のバージョンgawk
は-iをサポートしていません。よろしくお願いします。
答え1
@ClaudioMの助けを借りて、私が見つけた答えを見つけました。
#!/bin/bash
if [ -z "${3}" ];then
echo "Usage: <filename> <delimiter> <field_no>"
else
FILENAME=$1
DELIMITER=$2
FIELD_NO=$3
TEMP_FILE=/tmp/tempFile
if [ -f $TEMP_FILE ]; then
rm $TEMP_FILE
fi
OLDIFS=$IFS; IFS=$'\n'
for line in $(cat $FILENAME)
do
echo $line
oldValue=`echo $line|cut -d$DELIMITER -f$FIELD_NO`
echo "Enter the value to replace [$oldValue]"
read newValue
echo $line | awk -F "$DELIMITER" '{$'$FIELD_NO'="'$newValue'"}{print}' OFS=$DELIMITER >> $TEMP_FILE;IFS=$OLDIFS
done
fi
mv $TEMP_FILE $FILENAME