하나의 파일에 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
큰 경우 한 가지 옵션은 예를 들어 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