파일의 일부 필드를 각 줄에 대한 사용자 입력으로 바꾸고 동일한 파일에 저장

파일의 일부 필드를 각 줄에 대한 사용자 입력으로 바꾸고 동일한 파일에 저장

읽을 수 있는 스크립트를 작성하려고 입력 중입니다.파일 이름,구분 기호그리고필드 번호. 그런 다음 각 행에 대해 입력을 입력하고 필드를 바꿉니다(필드 번호) 동일한 파일로 출력합니다.

예를 들어 입력이 다음과 같은 경우:

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

관련 정보