添加以普通字符串开头的数据

时间:2014-10-06 16:18:31

标签: awk grep

您好我正在尝试组织我拥有的数据集。我很感激你的帮助!我的数据看起来像这样:

>abc1_1
apple
orange
>abc1_2
grape
melon
>abc2_4
tomato
celery
>abc2_5
carrot
cabbage

我想将所有具有相同前4个字母的标题的数据相加(即添加> abc1_1和> abc1_2并标题为> abc1),所以它看起来像这样:

>abc1
apple
orange
grape
melon
>abc2
tomato
celery
carrot
cabbage

请帮助我!

3 个答案:

答案 0 :(得分:1)

这可能是你想要的,取决于你想要重复处理的方式:

$ awk -F_ '/^>/{key=$1; next} {data[key] = data[key] ORS $0} END{for (key in data) print key data[key]}' file
>abc1
apple
orange
grape
melon
>abc2
tomato
celery
carrot
cabbage

答案 1 :(得分:0)

如果您的所有文件都位于同一目录中,则此tcsh shell脚本:

foreach file ( `ls * | perl -pe 's/(....).*/$1/' | sort -u` )
   cat ${file}* > ${file}
end

答案 2 :(得分:0)

这是我的解决方案

sed -r 's/>(....).*/>\1/' | xargs | sed 's/ >/\n>/g' | sort | awk '$1==prev{$1="";print;next}$1!=prev{prev=$1}1' | xargs -n1