awk '{for (i = 1; i <= NF; i++) {gsub(/[^[:alnum:]]/, " "); print tolower($i)": "NR | "sort -V | uniq";}}' input.txt
使用上面的代码,我输出为:
line1: 2
line1: 3
line1: 5
line2: 1
line2: 2
line3: 10
我想要如下:
line1: 2, 3, 5
line2: 1, 2
lin23: 10
如何实现它?
答案 0 :(得分:0)
使用gawk的array features。一旦我搞砸了,我就会提供实际的代码。
awk '{for (i = 1; i <= NF; i++) {
gsub(/[^[:alnum:]]/, " ");
arr[tolower($i)] = arr[tolower($i)]NR", "}
}
END {
for (x in arr) {
print x": "substr(arr[x], 1, length(arr[x])-2);
}}' input.txt | sort
请注意,如果一个单词在同一行上多次出现,则包含重复的行号。
答案 1 :(得分:0)
使用perl ...
#!/usr/bin/perl
while(<>){
if( /(\w+):\s*(\d+)/){ # extract the parts
$arr{lc($1)}{$2} ++ # count them
};
}
for my $k (sort keys %arr){ # print sorted alpha
print "$k: ";
$lines=$arr{$k};
print join(", ",(sort {$a<=>$b} keys %$lines)),"\n"; print sorted numerically
}
此解决方案删除了对重复数字进行排序。这是你需要的吗?