基于第一个字段对内容进行排序,并将第二个字段输出到新文件中

时间:2010-10-02 11:58:59

标签: linux bash shell redhat

我有一个类似这样的文件:

 3 EOE
 5 APPLE
 6 NOBODY

我需要解析这个并将第一列中的'3'输出到filename.3中,将'4'输出到filename.4,等等...来自unix提示符

3 个答案:

答案 0 :(得分:4)

这样的事情应该有效(我还没有测试过):

while read num rest; do
   echo "$num $rest" >> "filename.$num"
done < inputFile

read将读取一行文本,然后将其在空白处拆分为“单词”,就像运行命令一样。它将第一个“单词”分配给第一个变量名称(在这种情况下为num - 将获得数字),第二个“单词”分配给第二个变量名称(rest),等等上。如果它用完了变量,它会将该行的其余部分追加到最后一个变量(rest,这里)。

read成功处理一行时,它返回零,这在shell脚本中是“成功”,因此while循环将继续,读取后续行。当read点击文件末尾时,它将返回1,停止while循环。

答案 1 :(得分:4)

awk '{print $2 >> "filename."$1 }' filename

如果您想要整个行:

awk '{print $0 >> "filename."$1 }' filename

答案 2 :(得分:0)

使用bash for循环,剪切和grep

for i in `cut -s -d ' ' -f 1 input.txt`; do
    grep ^$i input.txt > filename.$i
done;