
(特定のテキストはCaseステートメントを使用してファイルのフィールドから派生します。)入力ファイル:
MYFILEA|ssss|1111|
MYFILEB|ffff|2222|
MYFILEC|ssss|3333|
Caseステートメントは、各行の5番目の文字を使用して、各行に追加するCaseステートメントを決定します。
A-'Apple'
B-'Banana'
C-'Carrot'
予想出力:
MYFILEA|ssss|1111|Apple
MYFILEB|ffff|2222|Banana
MYFILEC|ssss|3333|Carrot
私の現在のアプローチは次のとおりです。
rm MYOUTPUT.txt
touch MYOUTPUT.txt
filename="MYINPUT.txt"
while read line
do
ENDTEXT=`echo $line | cut -c7`
#echo $ENDTEXT
case $ENDTEXT in
A)
APPTEXT="Apple" ;;
B)
APPTEXT="Banana" ;;
C)
APPTEXT="Carrots" ;;
*)
APPTEXT="XXXX" ;;
esac
echo $APPTEXT
sed 's/$/'APPTEXT'/' >> MYOUTPUT.txt
答え1
純粋なバッシュ:
スクリプトadd_column.sh
:
#! /usr/bin/env bash
set -u
# get 1st parameter as input filename
declare -r input_filename="$1"
# key
declare k=
# value
declare v=
# read all lines from input file
while read -r line; do
#echo "l='$line'"
# get key
k="${line:6:1}"
#echo "k='$k'"
# determine value for each key value
case "$k" in
'A')
v='Apple'
;;
'B')
v='Banana'
;;
'C')
v='Carrot'
;;
*)
echo "Unknown key '$k'"
exit 1
;;
esac
# print result
echo "$line$v"
done < "$input_filename"
そして:
chmod +x add_column.sh
次のように実行します。
add_column.sh input.txt
結果:
MYFILEA|ssss|1111|Apple
MYFILEB|ffff|2222|Banana
MYFILEC|ssss|3333|Carrot