1つのファイルに100個の列を印刷し、10個の異なるファイルに1000個の列を印刷する方法は?
split
コマンドは、行を別のファイルに分割するために使用されます。別のファイルから列を探しています。
答え1
そして:bash
cut
#! /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