0

我有 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 工具的巧妙解决方案。

4

6 回答 6

1
awk -F . '{print >> $2 ".new"}' {1..100}.txt
于 2012-09-26T13:40:32.217 回答
1

以下pastesplit组合应该工作:

paste -d '\n' {1..100}.txt | split -l 100 -a 4 -d - out
于 2012-09-26T12:29:32.793 回答
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==2count==1000因为你的文件有 1000 行。

于 2012-09-26T08:40:52.827 回答
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
于 2012-09-26T08:03:19.927 回答
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
于 2012-09-26T08:09:41.533 回答
0
cat *.txt | awk '{x=NR%i?NR%i:i;print > x".txt"}' i=1000
于 2012-09-26T08:15:34.193 回答