将文件中的某些字段替换为每行的用户输入并保存在同一文件中

将文件中的某些字段替换为每行的用户输入并保存在同一文件中

我正在打字写一个可以读取的脚本文件名,分隔符字段编号。之后,为每一行输入一个输入,替换该字段(由字段编号)并输出到同一文件。

例如,如果输入如下:

里特什;M;1992
释迦;F;1993

对于命令

bash_script.sh test.csv ";" 3

如果我输入,则迭代每一行1994年第一名是 1995 年,第二名是 1995 年。我希望输出如下,保存在同一文件中。

里特什;M;1994
释迦;F;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

相关内容