2016-04-22 3 views
1

コーディングにあたってはnoobを使用していますので、私は3つのファイルからテキストファイル内の3つの特定の場所にデータを入力するスクリプトを作成しようとしています - 例えば:編集した は、読みやすくするために複数のファイルの場所から一致した後にテキストを追加します

#start of script 
start_of_line1_text "$1" end_of_line1_text 
start_of_line2_text "$2" end_of_line2_text 
start_of_line3_text "$3" end_of_line3_text 
#output to text when done 

$1 is the value in text1 
$2 is the value in text2 
$3 is the value in text3 

私はかなりこれはどのように行われるかうまくsedのが、カントを使用して考えています...

それともrandom_textに一致した後、$ 1での単語を挿入しますか?すなわち:大規模でも

sed '/start_of_line1_text/ a middle_of_line1_text' input 

を - text1,2と3は、一度にこれらの値1をインポートして、新しいファイルにそれぞれの時間を節約できる方法で複数の値を持っていた場合は?ですから、例えば:その後、

text1 = 
a 
b 
c 

text2 = 
e 
f 
g 

text3 = 
h 
i 
j 


#start of script 
start_of_line1_text "line one of text1" end_of_line1_text 
start_of_line2_text "line one of text2" end_of_line2_text 
start_of_line3_text "line one of text3" end_of_line3_text 
#output to text when done 

:すべて一緒にこれをフィットする方法へと立ち往生少しだけ私は使用される言語に

#start of script 
start_of_line1_text "line two of text1" end_of_line1_text 
start_of_line2_text "line two of text2" end_of_line2_text 
start_of_line3_text "line two of text3" end_of_line3_text 
#output to text when done 

イムうるさいません....

多く事前に感謝

+0

私が理解するのは難しいみましたあなたがしようとしていることは、私はそれを取得しません。擬似コードと入出力を混在させるようです。さらに、テキストは簡略化されています。それは本当に各行で同一ですか?おそらくそうではありません。この質問を改善するには、実行したいことを明確にし、コードと入出力を分離して、これまでに試したことを示します。 –

答えて

0

この問題は非常によく適合するawk

awk '!f[FNR] {f[FNR]=("out" FNR ".txt"); print "#start of script" >f[FNR]} {print "random_text \"" $0 "\" some_other_text" >f[FNR]} END {for(n in f) print "#output to text when done">f[n]}' text1 text2 text3 

出力ファイルが現在のディレクトリout1.txtout2.txtなどで生成されますが、コマンドの最後に入力としてテキストファイルの任意の数を提供することができます

は、この試してみて。

追加のパラメータを持つスクリプトファイルバージョンの下にあります:

#!/usr/bin/awk -f 
!f[FNR] { 
    f[FNR]=("out" FNR ".txt") 
    print first >f[FNR] 
} 
{ 
    print start $0 end >f[FNR] 
} 
END { 
    for(n in f) print last>f[n] 
} 

テスト:

chmod +x ./script.awk 
./script.awk -v first="#start of script"       \ 
      -v start="random_text \"" -v end="\" some_other_text"\ 
      -v last="#output to text when done"     \ 
      text1 text2 text3 
0

何私がこれまで持っていることは次のとおりです。

#!/usr/bin/perl 

use strict; 
use warnings; 

sub rtrim { my $s = shift; $s =~ s/\s+$//;  return $s }; 

sub read_file_line { 
my $fh = shift; 

if ($fh and my $line = <$fh>) { 
chomp $line; 
return [split(/\t/,$line)]; 
} 
return; 
} 

open(my $f1, "file1.txt"); 
open(my $f2, "file2.txt"); 
open(my $f3, "file3.txt"); 
open(FILE, ">group.txt") or die "Cannot open file"; 

my $pair1 = read_file_line($f1); 
my $pair2 = read_file_line($f2); 
my $pair3 = read_file_line($f3); 

while ($pair1 and $pair2 and $pair3) { 

printf '%s,',$pair1->[0] ; 
printf "%s\n",$pair2->[0] ; 
printf '%s,',$pair3->[0] ; 

printf FILE " line1_text\n" ; 
printf FILE " line2_text\n" ; 
printf FILE " line3_text\n" ; 
printf FILE " start_of_line4_text\"%s\end_of_line4_text\n",$pair3->[0] ; 
printf FILE " start_of_line5_text\"%s\end_of_line5_text\n",$pair2->[0] ; 
printf FILE " start_of_line6_text\"%s\end_of_line6_text\n",rtrim($pair1->[0]) ; 
printf FILE " line7_text\n" ; 
printf FILE " line8_text\n\n\n" ; 



$pair1 = read_file_line($f1); 
$pair2 = read_file_line($f2); 
$pair3 = read_file_line($f3); 

} 

close($f1); 
close($f2); 
close($f3); 
close(FILE) ; 
関連する問題