解析出单独行中的重复条形码

解析出单独行中的重复条形码

我有以下数据,我需要将 column1 中的重复项解析到单独的文件中,

例如,

21288003132541:cr
21288003267289:fr
21288003758683:ph
21288003758683:tag
21288003758683:sel

我想将此行取出21288003758683:tag到一个单独的文件中,我需要的输出是任何 uniq 行的单独文件以及具有任何重复项的后续文件。

例如文件 1

21288003132541:cr
21288003267289:fr
21288003758683:ph

文件2

21288003758683:tag

文件3

21288003758683:sel

希望这是有道理的

谢谢

答案1

#!/bin/bash
[ $# -ge 1 ] && [ -f "$1" ] || exit
while read oneline;do
    for onecode in $oneline;do
        let count=1
        outfile="output.$count"
        [ -f $outfile ] || touch $outfile
        while grep "${onecode%:*}" $outfile >/dev/null;do
            let count+=1
            outfile="output.$count"
            [ -f $outfile ] || touch $outfile
        done
        echo "$onecode" >>$outfile
    done
done < "$1"

上面的代码将导致创建多个文件,命名为output.1、output.2等,具体取决于找到的重复项的数量。我不确定输出的行格式是否重要,或者您是否想在完成后替换原始文件。

答案2

使用字典数组的 Python 版本。请注意,此版本中不会保留输出顺序。

#!/usr/bin/env python

import fileinput

dics = []
for line in fileinput.input():
    (a, _) = line.split(':')
    for dic in dics:
        if a not in dic:
            dic[a] = line
            break
    else:
        dics.append({a: line})

for i, dic in enumerate(dics):
    with open('file%d.txt' % (i+1), 'w') as f:
        for line in dic.values():
            f.write(line)

答案3

我将文件保存在xx中,然后:

touch mem; num=$(wc -l xx | awk '{print $1}');
for ((i=1 ; i<= $num ; i++ )) do
n=$(sed -n ''$i'p' xx );
nn=$(echo $n | awk -F":" '{print $1}')
grep "$nn" xx  > xx1
jj=1;  aa=$(grep "$nn" mem)
if [[ -z $aa  ]] ; then
cat xx1 | while read n ; do
echo $n >> file$jj ; 
jj=$(($jj+1)) ; 
done ;fi
echo $nn >> mem; 
done

相关内容