2016-06-28 43 views
-2

我有一個顯示這樣的散列的龐大文件:獨立巨大的哈希文件分割成一個基於文件的內容(shell腳本)

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操作系統的計算機上。

+0

或者可以使用'#!shebang'指定它是哪一個,它可以用PHP,Perl或Python或Ruby或現在安裝在機器上的任何其他語言來完成。然而,在**這種情況下,好的「egrep」可能會做得非常好。例如,正則表達式「^ A」的意思是「以字母」A「開始...... –

+0

另外,如果您應該查找多次出現的相同值,那麼非常方便的做法是」排序「 (...的副本)該文件的密鑰。然後,你知道每個鍵的所有出現都是相鄰的。 –

+0

對!我並不是說它不能用其他語言來完成,只是這些是我一直在努力的兩個。謝謝你的回覆 – Tyler

回答

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\})線。

+0

美麗。正是我所期待的,謝謝 – Tyler

+0

如果你對答案感到滿意,PLZ接受這個答案。 – Fazlin

+0

如果我想拔出讓我們說一個隨機500,我需要添加什麼? – Tyler

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 
+0

是的,在這種情況下或者像這樣的情況下,我是'awk'的一個*大*粉絲,「它可能就是醫生的命令」。 OP應該*仔細看看這個工具可以做什麼。 (事實上​​,Perl編程語言是從「一個強大的awk」演變而來的)。它並不一定是「單線程」。 –

+0

我更新了描述以更具體。我看着awk – Tyler

相關問題