linux 将匹配文件行中的多个值匹配为一个值

tjjdgumg  于 2023-03-07  发布在  Linux
关注(0)|答案(2)|浏览(124)

我有一个关于Unix和shell的问题。所以我的输入文件看起来如下:

path/filename ... username
path/filename2 ... username2
path/filename ... username2
...

理想情况下,我使用awk或sed的目标是输出如下内容:

filename username,username2
filename2 username2

因此,基本上为每个唯一文件输出一行,并在其中打印所有用户名,以及打开它们的人,所有这些值都存储在输入文件中,因此,我只是在寻找一种最简单的方法来解析它们。
先谢了

3ks5zfa0

3ks5zfa01#

类似这样,首先准备basename,然后追加用户名,最后打印数组。

% awk '{sub(/.*\//, "", $1)
       arr[$1] != "" ? arr[$1]=arr[$1]","$NF : arr[$1]=$NF} 
       END{for(i in arr){print i,arr[i]}}' file
filename username,username2
filename2 username2
slmsl1lt

slmsl1lt2#

我已经取了一个小样本,并将其保存为dandys

awk '{i=gensub(/^.*\/(.*)$/,"\\1","1",$1);a[i]=a[i]""$NF","}END{for(i in a){gsub(/,$/,"",a[i]);print i,a[i]}}' dandys
filename username,username2
filename2 username2

i中,我们存储第一个字段的最后一个路径元素,即filename*。我们使用i作为数组索引,并将每行的最后一个字段,即username*后跟逗号添加到相应的a[filename]中。在所有输入处理完毕后,我们迭代数组,修剪最后一个逗号,并打印该批次。

相关问题