行を異種サブセットにグループ化

行を異種サブセットにグループ化

ファイルがありますNワイヤー。 (各行は「質問」を参照しているためQ.1、、、、Q.2...、と表示されますQ.3。)各行(質問)には、値、2、3、4、5、または6の「表示」属性があります。持つQ.nN値あたり⁄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.txtquestions3.txtquestionsM.txt中サイズ代表するN⁄5 )各ファイルの長さは5行です異質(つまり、すべてが異なります)。

questions1.txt含める必要があります

  • 最初の行questions.txt2 Marks
  • 最初の行questions.txt3 Marks
  • 最初の行questions.txt4 Marks
  • 最初の行questions.txt5 Marks、と
  • 最初の行questions.txt6 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ファイルを数字で並べ替え、-k22番目のフィールド(マーカー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

おすすめ記事