file_name , delimiter 및 field_number를 읽을 수있는 스크립트를 작성하기 위해 입력합니다 . 그 후 각 행에 대해 입력을 받으면 필드 ( field_number로 지정됨)를 바꾸고 동일한 파일로 출력하십시오.
예를 들어 입력이 다음과 같은 경우 :
Ritesh; M; 1992 Shakya; F; 1993
명령
bash_script.sh test.csv ";" 3
첫 번째에 1994 를 입력 하고 두 번째에 1995을 입력하면 각 행을 반복합니다 . 동일한 파일에 다음과 같이 출력되기를 원합니다.
Ritesh; M; 1994 Shakya; 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를 지원하지 않습니다. 미리 감사드립니다.
@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
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다