新しいファイルのN列ごとに印刷

新しいファイルのN列ごとに印刷

1つのファイルに100個の列を印刷し、10個の異なるファイルに1000個の列を印刷する方法は? splitコマンドは、行を別のファイルに分割するために使用されます。別のファイルから列を探しています。

答え1

そして:bashcut

#! /usr/bin/env bash
for i in {0..9}; do
    let start=i*100+1
    let end=i*100+100
    cut -d ' ' -f ${start}-${end} file.txt >file_$i.txt
done

答え2

ファイルでない場合またsplit大きな場合、1つのオプションは、たとえば、GNUオプションがある場合に結果を転置、分割、転置することです。--filter

rs -T < somefile | split -l100 --filter='rs -T > $FILE'

より管理しやすい入力サイズを使用して説明します。

$ printf 'A B C D E F G H I J\n0 1 2 3 4 5 6 7 8 9\na b c d e f g h i j\n' | 
    rs -T | split -l2 --filter='rs -T > $FILE'

それから

$ cat xaa
A  B
0  1
a  b

$ cat xae
I  J
8  9
i  j

答え3

単独で使用してくださいawk

awk '{i=0; split($0, arry, / +/); 
    for (x in arry) {
        if ((x%100)==1)i++; printf (x%100)?arry[x]FS:arry[x]"\n" >"FILE_"i
    }
}' in_multiple_files

簡単な40列の入力と使用x%10

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c23 c24 c25 c26 c27 c28 c29 c30 c31 c32 c33 c34 c35 c36 c37 c38 c39 c40
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z AA AB AC AD AE AF AG AH AI AJ AK AL AM AN

結果は4つのファイルです。

==> FILE_1 <==
1 2 3 4 5 6 7 8 9 10
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10
A B C D E F G H I J

==> FILE_2 <==
11 12 13 14 15 16 17 18 19 20
c11 c12 c13 c14 c15 c16 c17 c18 c19 c20
K L M N O P Q R S T

==> FILE_3 <==
21 22 23 24 25 26 27 28 29 30
c21 c22 c23 c24 c25 c26 c27 c28 c29 c30
U V W X Y Z AA AB AC AD

==> FILE_4 <==
31 32 33 34 35 36 37 38 39 40
c31 c32 c33 c34 c35 c36 c37 c38 c39 c40
AE AF AG AH AI AJ AK AL AM AN

答え4

アッ解決策:

awk -v n=100 '{ r=""; 
                for(i=1;i<=NF;i++) { 
                    f=sprintf("%s%s",$i,(!(i%n))?"":OFS); 
                    r=(r!="")? r OFS f : f; 
                    if (!(i%n)) { print r > FILENAME"_"++c; r="" } 
                } 
                c=0 }' file

  • -v n=100- 調整可能な変換係数

  • r=""- 結果文字列を初期化します。

  • !(i%n)- レコードを係数のアーカイブ倍数に分割するタイミングを決定します。n

関連情報