읽을 수 있는 스크립트를 작성하려고 입력 중입니다.파일 이름,구분 기호그리고필드 번호. 그런 다음 각 행에 대해 입력을 입력하고 필드를 바꿉니다(필드 번호) 동일한 파일로 출력합니다.
예를 들어 입력이 다음과 같은 경우:
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