2016-03-30 14 views
1

2つの入力ファイルfileA.txtfileB.txtがあります。ファイルは、このようなものです:複数のテキストファイルからテキストを抽出するためにsed

FileA.txt 
Color 
yellow 
orange 
black 
Fruit 
apple 
banana 
Weekday 
monday 
sunday 

FileB.txt 
Color 
blue 
green 
Fruit 
melon 
Weekday 
saturday 
tuesday 
thursday 

は、私は、Color以下のすべてのファイルでFruitWeekdayの情報を抽出し、各フィールドに新しいものを作成したいと思います。だから、私の出力は、Color.txtFruit.txtWeekday.txtのような3つのファイルです。

Color.txt 
Color_A 
yellow 
orange 
black 
Color_B 
blue 
green 

Fruit.txt 
Fruit_A 
apple 
banana 
Fruit_B 
melon 

そして、私は今、願っています Weekday.txt

についても同様で、おかげでより明確です。

rm Color.txt Fruit.txt Weekday.txt # old files will spoil this. 
for f in A B 
do 
    while read x 
    do 
     L=${x%${x#?}} 
     l=$(echo $L | tr '[:upper:]' '[:lower:]') 
     if [ $L != $l ] 
     then 
      F=$x.txt 
      echo ${x}_$f >> $F 
     else 
      echo $x >> $F 
     fi 
    done < File$f.txt 
done 

出力:

head {Fruit,Color,Weekday}.txt 
==> Fruit.txt <== 
Fruit_A 
apple 
banana 
Fruit_B 
melon 

==> Color.txt <== 
Color_A 
yellow 
orange 
black 
Color_B 
blue 
green 

==> Weekday.txt <== 
Weekday_A 
monday 
sunday 
Weekday_B 
saturday 
tuesday 
thursday 

仕組み:保留にPOSIXシェルスクリプト(bashのすなわち、ダッシュなど)では

+0

出力例では最終目標(IMHO)が明確に定義されていないため、これは役に立ちません。 'hp1'のすべてのデータを(すべてのファイルから)' hp1'という名前の1つのファイルに入れてみませんか?それは私にはもっと意味がある。例示的なデータを使用して目標を説明するより良い方法を考えることができれば、より良い助けが得られます。また、ほとんどの場合、awkはテキストファイル操作の方がはるかに簡単であることがわかります。私が言ったことは、新しいパラダイムを学ぶことは難しいことがあることを知っているので、試してみてください。 – shellter

+0

何を試しましたか?そして、はい、これについてawkを見てください。 –

+0

hp1のすべてのデータを(すべてのファイルから)1つのファイルhp1に変換すると動作します。しかし、私はまた、ファイルとデータを関連づけたい。 –

答えて

1

awkレスキュー!

$ awk '{suffix=substr(FILENAME,5,1)} 
     /Color|Fruit|Weekday/{file=$1".txt"; $1=$1"_"suffix} 
      {print > file}' FileA.txt FileB.txt     


$ head {Fruit,Color,Weekday}.txt   

==> Fruit.txt <==                          
Fruit_A 
apple 
banana 
Fruit_B 
melon 

==> Color.txt <== 
Color_A 
yellow 
orange 
black 
Color_B 
blue 
green 

==> Weekday.txt <== 
Weekday_A 
monday 
sunday 
Weekday_B 
saturday 
tuesday 
thursday 
0

。 (私はこれが学業上の問題であると心配しています。もしOPが上記のシェルコードを外に出して、それが必要であると説明したり批判したりするなら、もっと良いでしょう。)

関連する問題