假設我有一個文件,其中有2列。最好的方式來合併ids號碼
12,1
12,2
11,3
11,2
我想在第一列添加第二列。 輸出應該是這樣的
12,3
11,5
有沒有簡單的方法來做到這一點在Linux環境(命令行)?
假設我有一個文件,其中有2列。最好的方式來合併ids號碼
12,1
12,2
11,3
11,2
我想在第一列添加第二列。 輸出應該是這樣的
12,3
11,5
有沒有簡單的方法來做到這一點在Linux環境(命令行)?
$ cat file
12,1
12,2
11,3
11,2
這裏是一個awk
方法:
$ awk -F, '$1 { a[$1]+=$2 } END { for (i in a) { printf "%s,%d\n", i, a[i] } }' file
11,5
12,3
在
bash
這裏之一:
$ cat ./id.sh
#!/bin/bash
IFS=','
while read id value; do
[ -n "${id}" ] || continue
((a[id] += value))
done < file
for id in "${!a[@]}"; do
echo "${id},${a[${id}]}"
done
$ ./id.sh
11,5
12,3
他們用同樣的原理都工作 - 他們逐行讀出他們的場/輸入分隔符設置爲,
,然後組裝一個由第一列索引的數組 - 第二列的值將被總結。當所有艱苦的工作完成後,我們會打印出陣列。
非常感謝! – codereviewanskquestions 2013-04-20 00:33:17
在Perl腳本:
#!/usr/bin/env perl
use strict;
use warnings;
my %sum;
my %pos;
my $i = 0;
while(<>){
chomp;
my($x,$y) = split/,/;
$pos{$x} = $i unless exists $pos{$x};
$sum{$x} += $y;
$i++;
}
my @keys = sort { $pos{$a} <=> $pos{$b} } keys %pos;
for my $key(@keys){
print "$key,$sum{$key}\n"
}
將這個腳本中,並放入一個文件你的電話號碼,然後運行:
perl $script $file
這也保持秩序。 Python有一個相似的結構。
在每一種語言中,你都會以這樣或那樣的方式來實現。你想要哪一個? – 2013-04-19 23:58:02
我想使用腳本語言(如python或bash腳本)來執行此操作 – codereviewanskquestions 2013-04-19 23:59:27
輸出順序是否重要(12-> 11與11-> 12)? – 2013-04-20 00:05:04