ファイルの一部のフィールドを各行のユーザー入力に置き換え、同じファイルに保存

ファイルの一部のフィールドを各行のユーザー入力に置き換え、同じファイルに保存

読みやすいスクリプトを作成しようとしています。ファイル名区切り記号そしてフィールド番号。次に、各行に入力を入力してフィールドを置き換えます(フィールド番号) 同じファイルに出力します。

たとえば、入力が次のような場合:

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

おすすめ記事