ファイルがありますNワイヤー。 (各行は「質問」を参照しているためQ.1
、、、、Q.2
...、と表示されますQ.3
。)各行(質問)には、値、2、3、4、5、または6の「表示」属性があります。持つQ.n
N値あたり⁄5行。
例:10行ファイル(例:N=10)次のように見えることがあります
amol@mypc:~$ cat questions.txt
Q.1 2 Marks
Q.2 5 Marks
Q.3 4 Marks
Q.4 3 Marks
Q.5 6 Marks
Q.6 4 Marks
Q.7 3 Marks
Q.8 2 Marks
Q.9 6 Marks
Q.10 5 Marks
5つに分けることができます。同種(つまり、すべて同じ)同様のコンテンツを持つファイル
amol@mypc:~$ grep " 2 Marks" questions.txt > questions2Marks.txt
amol@mypc:~$ grep " 3 Marks" questions.txt > questions3Marks.txt
amol@mypc:~$ grep " 4 Marks" questions.txt > questions4Marks.txt
amol@mypc:~$ grep " 5 Marks" questions.txt > questions5Marks.txt
amol@mypc:~$ grep " 6 Marks" questions.txt > questions6Marks.txt
生成された各ファイルにN⁄5行。
私は逆演算、つまり上記の結果を生成する転置を実行したいと思います。私のquestions.txt
ファイルを次に分割したいです。N⁄5つのファイル:questions1.txt
、、、、
...、(使用questions2.txt
questions3.txt
questionsM.txt
中サイズ代表するN⁄5 )各ファイルの長さは5行です。異質(つまり、すべてが異なります)。
questions1.txt
含める必要があります
- 最初の行
questions.txt
は2 Marks
、 - 最初の行
questions.txt
は3 Marks
、 - 最初の行
questions.txt
は4 Marks
、 - 最初の行
questions.txt
は5 Marks
、と - 最初の行
questions.txt
は6 Marks
、
そのような順序で。 questions2.txt
各2行目を含める必要があります。
だからN=10、中サイズ明らかに2.questions.txt
上記の例を次の2つのファイルに分類したいと思います。
amol@mypc:~$ cat questions1.txt
Q.1 2 Marks
Q.4 3 Marks
Q.3 4 Marks
Q.2 5 Marks
Q.5 6 Marks
amol@mypc:~$ cat questions2.txt
Q.8 2 Marks
Q.7 3 Marks
Q.6 4 Marks
Q.10 5 Marks
Q.9 6 Marks
* nixツール(sed、awk、perl、シェルスクリプトなど)を使用してこれを達成するにはどうすればよいですか?
ベストアンサー1
sort -n -k2 -k1.3 file | awk '{$2!=a?x=1:x++} {print > "file"x; a=$2}'
まず、ファイルを正しくソートする必要があります。-n
ファイルを数字で並べ替え、-k2
2番目のフィールド(マーカー2-6)に基づいて並べ替え、-k1.3
次の順序で3番目の文字から始まる最初のフィールドを数字で並べ替えます(先行無視Q.
)。次に、awk
出力を昇順ファイル(file1、file2、file3、filen...)に分割します。
出力は次のとおりですfile1
。
$ cat file1
Q.1 2 Marks
Q.4 3 Marks
Q.3 4 Marks
Q.2 5 Marks
Q.5 6 Marks
そしてfile2
:
$ cat file2
Q.8 2 Marks
Q.7 3 Marks
Q.6 4 Marks
Q.10 5 Marks
Q.9 6 Marks