我有100个文件,每个文件有1000行:
$ cat 1.txt
line1.1
line1.2
...
line1.1000
$ cat 2.txt
line2.1
line2.2
...
line2.1000
...
$ cat 100.txt
line100.1
line100.2
...
line100.1000
交错它们的最简单方法是什么,以便最终得到1000个文件,每个文件有100行,这样第一个文件包含100个文件中的所有第一行,第二个文件包含100个文件中的所有第二行,等等:
$ cat 1.txt
line1.1
line2.1
...
line100.1
$ cat 2.txt
line1.2
line2.2
...
line100.2
...
$ cat 1000.txt
line1.1000
line2.1000
...
line100.1000
我可以写一个Python脚本,但我想知道是否有一个使用UNIX工具的聪明解决方案。
答案 0 :(得分:1)
以下paste
和split
组合应该有效:
paste -d '\n' {1..100}.txt | split -l 100 -a 4 -d - out
答案 1 :(得分:1)
awk -F . '{print >> $2 ".new"}' {1..100}.txt
答案 2 :(得分:0)
假设您的输出文件名不与输入文件名冲突,我将使用以下内容。如果确实存在名称冲突,请修改以下内容以使用临时目录来累积输出文件。
#!/bin/bash
for infilenum {1..100}
do
outfilenum=1
while read line
do
echo $line >> $outfilenum.out
let outfilenum=outfilenum+1
done < "$infilenum.txt"
done
答案 3 :(得分:0)
如何使用paste
排序?
$ paste 1.txt 2.txt 3.txt
line1.1 line2.1 line3.1
line1.2 line2.2 line3.2
line1.3 line2.3 line3.3
答案 4 :(得分:0)
cat *.txt | awk '{x=NR%i?NR%i:i;print > x".txt"}' i=1000
答案 5 :(得分:0)
awk '{if(count==1000){count=0;}count++;print >count".txt"}' *.txt
成功测试了两行:
> cat 1.txte
1
2
> cat 2.txte
1
2
> awk '{if(count==2){count=0;}count++;print >count".txt"}' *.txte
> cat 1.txt
1
1
> cat 2.txt
2
2
>
所以您必须从count==2
更改为count==1000
,因为您的文件有1000行。