2017-04-07 99 views
0

我试图做一个书面的称号,我用一个例子来解释:查找具有相同的md5sum和打印那些文件都在同一行

树目录: (ABCDHFG是我的文件)

dir0/ 
dir0/A //MD5sum equal MD5sum B 
dir0/C 
dir0/D // MD5sum equal MD5sum F G 
dir0/dir1/B // MD5sum equal MD5sum A 
dir0/dir1/H 
dir0/dir1/dir2/G //MD5sum equal MD5sum F D 
dir0/dir1/dir2/F //MD5sum equal MD5sum G D 

用这个命令:

find dir0/ -type f -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=prepend | awk '{ print $2 }' 

我搜索的DIR0和子目录的所有文件,计算MD5SUM,排序,只选择文件,平等相待,分为组,只打印路径文件。

好这个工作,我有这样的输出:?

dir0/A  ] 
dir0/dir1/B ] first group 

dir0/D    ] 
dir0/dir1/dir2/F ] 
dir0/dir1/dir2/G ] second group 

我怎么能有下列方式输出(在同一行相同的md5sum的每个文件,显然没有“第一,第二。 ..本集团」)

dir0/A dir0/dir1/B ] first group 
dir0/D dir0/dir1/dir2/F dir0/dir1/dir2/G ] second group 
+0

没有任何样本输入,很难说肯定,但你只是希望得到'awk'输出没有换行?尝试'awk'{printf'%s“$ 2}''而不是'awk'{print $ 2}''。 – miken32

回答

1

这样做会增加管道的步骤是这样的捷径:

awk 'BEGIN{RS=RS RS}{$1=$1}1' 

RS = RS RS导致Awk使用"\n\n"作为其记录分隔符,因此将每个块作为单个记录进行读取。 FS字段分隔符是空格,其中包含换行符,所以我们不必做任何分割行的工作。

$1 = $1并没有真正改变$1的价值,但在awk认为它可能有,这意味着它会重建$0(目前在其新行)从$1$2等,具有OFS连接(这默认为" ")。

1导致Awk在每条记录上打印$0(和ORS,它仍然是一个换行符)。

相关问题