添加以常用字符串开头的数据
嗨,我正在尝试组织我拥有的数据集。我会很感激的帮助!我的数据看起来是这样的:添加以常用字符串开头的数据
>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
请帮帮我!
这可能是你想要的,这取决于你如何想重复处理:
$ 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
如果您的所有文件在同一目录此tcsh外壳脚本:
foreach file (`ls * | perl -pe 's/(....).*/$1/' | sort -u`)
cat ${file}* > ${file}
end
如果你不想在你的文件中有重复,你可以在cat之后进行排序。 – 2014-10-06 16:40:34
切勿在[t] csh中编写脚本。谷歌'csh为什么不'。但我其实不确定这个答案是如何与问题相关的。也许你打算回答一个不同的问题? – 2014-10-06 16:40:55
我正在回答这个问题。它会产生所需的输出。对于较长的复杂脚本,Csh不是一个好主意。大家都同意这一点。 – 2014-10-06 17:08:58
这里是我的解决办法
sed -r 's/>(....).*/>\1/' | xargs | sed 's/ >/\n>/g' | sort | awk '$1==prev{$1="";print;next}$1!=prev{prev=$1}1' | xargs -n1
您的输出应该如何显示?你有什么尝试? – fedorqui 2014-10-06 16:21:09
哇,当你说“合计所有数据”时,我从来没有猜到过,那是你正在寻找的输出!它看起来像你的意思是聚合。修改您的输入以将kiwi添加到abc1_1和abc1_2输入以及abc1输出,以便我们可以看到您希望如何处理重复项。 – 2014-10-06 16:33:48
看到答案后,想一想:有时你只需咬紧牙关,用Python或Perl编写一个“真正的”程序。未来很可能会更易于管理/维护。 – pepoluan 2014-10-07 09:21:49