我有很多文件需要用相同的前缀连接在一起。我有一个想法,但我不知道如何解决这个问题:
文件:
NAME1_C001_xxx.tsv
NAME1_C001_yyy.tsv
NAME2_C001_xxx.tsv
NAME2_C001_yyy.tsv
我只想打印 uniq 前缀 - NAME1 和 NAME2
。前缀和后缀中的字符串长度各不相同,但总是在前缀之前 _C001
我的解决方案是:
fo i in *.tsv
do prexix=$(printf "%s\n" "${i%_C001*}")
cat $prefix_C001_xxx.tsv $prefix_C001_yyy.tsv > ${i%_C001*}.merged.tsv
done;
但是这个方案不是很好。每个前缀我都有两次。
感谢您的帮助。
已编辑:
感谢 anubhava 的一个解决方案:
fo i in $(printf "%s\n" *.tsv | awk -F '_C001' '!seen[$1]++{print $1}')
do
cat $prefix_C001_xxx.tsv $prefix_C001_yyy.tsv > ${i%_C001*}.merged.tsv
done;
最佳答案
你在这里根本不需要printf
;它只是您已经在使用的参数替换的一个不必要的包装器。
for i in *.tsv
do prefix=${i%_C001*}
[[ -f $prefix.merged.tsv ]] && continue # Avoid doing the same prefix twice
cat "${prefix}"_* > "$prefix.merged.tsv"
done
关于linux - 如何在 printf 之后使用 uniq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40741522/