awk或sed创建新文件?

时间:2013-02-06 19:44:44

标签: sed awk

我有一个以竖线分隔的文本文件,其中包含大约900行数据。每行包含一组在末尾带有用户名的数字。 e.g。

2792|5750|125|4.0|0.25|||6|2|user1
2802|6000|126|4.0|0.25|||2|3|user2
2801|6000|125|4.0|0.25|||4|4|user2
2805|5500|125|4.5|0.25|||3|2|user1
2805|6250|122|4.5|0.25|||4|7|user3
2811|4750|125|3.0|0.25|||4|2|user1
2828|5750|121|4.0|0.25|||6|2|user2

我想要做的是创建三个新文件:每个用户一个,只包含他们的数据。 (例如,user1的文件仅包含原始文件的第一行,第四行和第六行)。我应该使用awk还是sed来做这个?

3 个答案:

答案 0 :(得分:7)

一种方式:

awk -F "|" '{ print > $NF }' file

以下是grep . user*的结果:

user1:2792|5750|125|4.0|0.25|||6|2|user1
user1:2805|5500|125|4.5|0.25|||3|2|user1
user1:2811|4750|125|3.0|0.25|||4|2|user1
user2:2802|6000|126|4.0|0.25|||2|3|user2
user2:2801|6000|125|4.0|0.25|||4|4|user2
user2:2828|5750|121|4.0|0.25|||6|2|user2
user3:2805|6250|122|4.5|0.25|||4|7|user3

此外,有些人喜欢添加文件扩展名。这可以这样做:

awk -F "|" '{ print > $NF ".txt" }' file

答案 1 :(得分:1)

为什么不grep

grep user1 bigfile > file_for_user1
grep user2 bigfile > file_for_user2
grep user3 bigfile > file_for_user3

答案 2 :(得分:0)

for THEUSER in `cat file | awk -F'|' '{print $10}' | sort | uniq`; do grep $THEUSER file > $THEUSER; done