将以特定字符开头的文本文件行拆分为单独的文件

时间:2015-02-23 15:09:58

标签: bash

在bash中是否有一个单行解决方案,用于将所有以相同整数开头的句子移动到同一个文件(保留其顺序)?

0 ||| the shortage of snow in mountain stirred hoteliers 
....
0 ||| the shortage of snow in mountain stirred hotel
1 ||| the runways deserted pose any problem that operators ski .
...
1 ||| the runways deserted do not pose a problem that operators of ski .
2 |||
...

将以相同数字开头的行移动到单独的文件0,1,2等中?

1 个答案:

答案 0 :(得分:7)

肯定:

awk '{print > $1".txt"}' file

这使用awk获取每行的第一个字段并将其用作文件名(与“.txt”一起使用)。然后,print输出到给定文件。

对于您的输入,请查看输出:

$ tail *.txt 
==> 0.txt <==
0 ||| the shortage of snow in mountain stirred hoteliers 
0 ||| the shortage of snow in mountain stirred hotel

==> 1.txt <==
1 ||| the runways deserted pose any problem that operators ski .
1 ||| the runways deserted do not pose a problem that operators of ski .

==> 2.txt <==
2 |||

如评论中所示,如果有不同的第一个字段,awk可以抱怨有这么多打开的文件。如果是这样,您可以在打印后关闭它们:

awk '{file="$1".txt"; print >> file; close(file)}' file

重要的是要注意我们需要使用>>来追加。否则,每次我们将删除文件中的所有先前内容。