2017-02-02 6 views
2

を使用するファイルである(のは「XFILE」それを呼びましょう)、そのよう与えられたファイルからの入力ファイルとテキスト行を取り、他にそれを保存しようとすると、私は何のbash

file1 <- this line goes to file1 
file2 <- this goes to file2 

とどのように行を含みます私がしたいのは、実際に線を引いてファイルに書き込む作業を行うスクリプトを実行することです。

私は手動でそれを行うような方法は、それを自動化するために、だから、(最初の行のために)、以下の

(echo "this line goes to file1"; echo) >> file1 

ようなことができ、これは私が

IFS=$'\n' 
for l in $(grep '[a-z]* <- .*' xfile); do 
$(echo $l | sed -e 's/\([a-z]*\) <- \(.*\)/(echo "\2"; echo)\>\>\1/g') 
done 
unset IFS 

を実行しようとしましたものです。しかし私が取得することは

012(OS X上)

-bash: file1(echo "this content goes to file1"; echo)>>: command not found 
-bash: file2(echo "this goes to file2"; echo)>>: command not found 

です

何が問題なのですか?

+0

サンプルInput_fileは、出力が期待通りに出力されていないため、明確ではありません。 – RavinderSingh13

答えて

2

これは、新しいファイルが先頭または末尾のスペースを持っていないような方法でフィールド区切り文字を選択する際に注意してください

awk -F ' <- ' '{print $2 >> $1}' xfile

のLinux

であなたの問題を解決します。

このOSX

+0

これは便利です。ありがとう! –

1

あなたは直接のbashの正規表現機能を使用することができます上の試してみます。 =~演算子を使用して変数を正規表現と比較すると、bashはBASH_REMATCH配列に正規表現のグループから一致するものを移入します。

re='(.*) <- (.*)' 
while read -r; do 
    if [[ $REPLY =~ $re ]]; then 
     file=${BASH_REMATCH[1]} 
     line=${BASH_REMATCH[2]} 
     printf '%s\n' "$line" >> "$file" 
    fi 
done < xfile 
+0

ニース。これは簡単です。私は=〜演算子については知らなかった、レッスンのおかげで! –

関連する問題