根据内容将巨大的Hash文件分成一个文件(shell脚本)

时间:2016-06-28 14:15:33

标签: linux bash shell hash awk

我有一个巨大的哈希文件,显示如下:

username:values:values:password hash:::

username:values:values:password hash:::

username:values:values:password hash:::

依旧......

我需要将这种格式的哈希值用于用户名并将它们放入另一个文件中。

用户名需要以字母开头,后跟6位数。

Examples of usernames i want to put into a new file: 
Y783071:SDF87DSFQ1:DSF98D3EF:DSF98SDF98
G678876:SD8F7SD8F7:DF98SDF89:SDF98S
J110998:SDF98FJ98W:9J493H0L8:3498RJHT

但是这个哈希文件中有很多其他用户名我不希望看起来像这样: SDFSNPOSAB:9786:sdfb787 EMEU6798:JHB98fds:

等等

最好用bash或C ++。

有人告诉我应该使用grep或sed

我在ubuntu linux机器上。

2 个答案:

答案 0 :(得分:1)

不确定这是否是您要找的

cat input
username:a dfasdfasdf
username:b
username:c dasfjkl;asd
username:a dfasdfl;j

代码:

awk -F " " '{print > "files_"$1}' input

-> Space separated file is read, redirect to new files based on the first column

<强>输出

ls
files_username:a
files_username:b
files_username:c

内容

more files_*
::::::::::::::
files_username:a
::::::::::::::
username:a dfasdfasdf
username:a dfasdfl;j
::::::::::::::
files_username:b
::::::::::::::
username:b
::::::::::::::
files_username:c
::::::::::::::
username:c dasfjkl;asd

答案 1 :(得分:1)

您可以使用以下sed命令:

sed -n '/^[a-zA-Z]\{1\}[0-9]\{6\}:/p' hash_file > output_file

此sed命令查找以1个字母开头([a-zA-Z]\{1\})后跟6个数字([0-9]\{6\})后跟:的行。