6つの列を持つファイルがあります。
FILEDESCRIPTOR . DESCR00001 FILEDESCRIPTOR . DESCRIPTIVENAME
FILEDESCRIPTOR . LSTUPDNAM FILEDESCRIPTOR . LASTUPDATENAME
FILEDESCRIPTOR . LOCAT00001 FILEDESCRIPTOR . LOCATION_ID
FILEDESCRIPTOR . RETAILPRC FILEDESCRIPTOR . RETAILPRICE
FILEDESCRIPTOR . LSTUPDTIME FILEDESCRIPTOR . UPDTIMESTAMP
INDUSTRYDIVISION . DESCR00001 INDUSTRYDIVISION . DESCRIPTION
INDUSTRYDIVISION . DIVIS00001 INDUSTRYDIVISION . DIVISIONCODE
INDUSTRYGROUP . DESCR00001 INDUSTRYGROUP . DESCRIPTION
INDUSTRYGROUP . DIVIS00001 INDUSTRYGROUP . DIVISION_ID
私がしなければならないのは、最初の3つの列を単一のスペースで区切って処理して単一の列として変数に保存し、次に3つの列を単一のスペースで区切って別の変数に保存することです。次に、sed
最初の変数を2番目の変数に置き換えます。
以下のスクリプトを試しましたが、エラーが発生しました。
#!/bin/bash
while IFS='' read -r line || [[ -n "$line" ]];
do
column2="$(echo -e "$line \n" | awk '{print $4, $5, $6}')"
#column3="$(echo -e "$line \n" | awk '{print $3}')"
column1="$(echo -e "$line \n" | awk '{print $1, $2, $3}' )"
#echo " $column1"
#echo " $column2"
sed "s/${column1}/${column2}/g" IMS_Procedures.txt
done < file
スクリプトが機能しません。私が得るエラーは次のとおりです。
sed: -e expression #1, char 23: unterminated `s' command
sed: -e expression #1, char 23: unterminated `s' command
sed: -e expression #1, char 20: unterminated `s' command
sed: -e expression #1, char 23: unterminated `s' command
sed: -e expression #1, char 23: unterminated `s' command
sed: -e expression #1, char 23: unterminated `s' command
sed: -e expression #1, char 23: unterminated `s' command
sed: -e expression #1, char 22: unterminated `s' command
sed: -e expression #1, char 22: unterminated `s' command
sed: -e expression #1, char 22: unterminated `s' command
sed: -e expression #1, char 23: unterminated `s' command
sed: -e expression #1, char 30: unterminated `s' command
何ができますか?
ベストアンサー1
必要ありませんwhile read
。
単に入力ファイルを処理できます。
sed 's|[[:blank:]]\{1,\}|/|3;s|.*|s/&/g|' infile
これをsed
スクリプトに変換します。
s/FILEDESCRIPTOR . DESCR00001/FILEDESCRIPTOR . DESCRIPTIVENAME/g
s/FILEDESCRIPTOR . LSTUPDNAM/FILEDESCRIPTOR . LASTUPDATENAME/g
s/FILEDESCRIPTOR . LOCAT00001/FILEDESCRIPTOR . LOCATION_ID/g
s/FILEDESCRIPTOR . RETAILPRC/FILEDESCRIPTOR . RETAILPRICE/g
s/FILEDESCRIPTOR . LSTUPDTIME/FILEDESCRIPTOR . UPDTIMESTAMP/g
s/INDUSTRYDIVISION . DESCR00001/INDUSTRYDIVISION . DESCRIPTION/g
s/INDUSTRYDIVISION . DIVIS00001/INDUSTRYDIVISION . DIVISIONCODE/g
s/INDUSTRYGROUP . DESCR00001/INDUSTRYGROUP . DESCRIPTION/g
s/INDUSTRYGROUP . DIVIS00001/INDUSTRYGROUP . DIVISION_ID/g
sed -f-
IMS_を処理するために2番目の項目に渡しますProcedures.txt
。
sed 's|[[:blank:]]\{1,\}|/|3;s|.*|s/&/g|' infile | sed -f- IMS_Procedures.txt
「これはファイルであり、このコマンドは単一のスペースで印刷します」という意味を理解していません。したがって、フィールドがinfile
複数のスペースで区切られている場合は、tr
まず次のものを使用できます。
tr -s '[[:blank:]]' ' ' <infile | sed 's| |/|3;s|.*|s/&/g|' | sed -f- IMS_Procedures.txt