テキストファイルのリストがあり、各テキストファイルには次の数字が含まれています。
0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5
テキストファイルの数字はカンマで区切られます。
各親ファイルから始めて6つのファイルを作成する方法(bashを使用)6つの新しいファイルのそれぞれには、次の数値セットが含まれています。
file0.txt contain 0 0 0 0 0 0 0 0 0 0
file1.txt contain 1 1 1 1 1 1 1 1 1 1
file2.txt contain 2 2 2 2 2 2 2 2 2 2
file3.txt contain 3 3 3 3 3 3 3 3 3 3
file4.txt contain 4 4 4 4 4 4 4 4 4 4
file5.txt contain 5 5 5 5 5 5 5 5 5 5
答え1
sedを使用した1行の回答
sed 's/,/\n/g' InputFile.txt |while read line ; do echo -n "$line ">>file$line.txt ; done
またはシェルにいるときに複数行:
sed 's/,/\n/g' InputFile.txt |while read line
do
echo -n "$line ">>file$line.txt
done
答え2
Rubyは次のような用途に最適です。
ruby -e '
ARGV.each do |filename|
data = File.read(filename).strip.split(",")
groups = data.group_by {|n| n}
groups.each_pair do |n, nums|
# you don't really say what your input filenames look like
# I will assume they end with ".txt"
f = filename.sub(/\.txt$/, "#{n}.txt")
File.write(f, nums.join(" ") + "\n"}
end
end
' fileA.txt fileB.txt ...