如何删除文件中其他行的子字符串,同时保留包含它们的较长字符串?
我有一个文件,其中包含肽序列作为字符串 - 每行一个序列字符串。我想保留包含所有序列的字符串并删除文件中其他行的子字符串的所有行。
输入:
GSAAQQYW
ATFYGGSDASGT
GSAAQQYWTPANATFYGGSDASGT
GSAAQQYWTPANATF
ATFYGGSDASGT
NYARTTCRRTG
IVPVNYARTTCRRTGGIRFTITGHDYFDN
RFTITGHDYFDN
IVPVNYARTTCRRTG
ARTTCRRTGGIRFTITG
预期输出:
GSAAQQYWTPANATFYGGSDASGT
IVPVNYARTTCRRTGGIRFTITGHDYFDN
输出应仅保留最长的字符串并删除属于最长字符串的子字符串的所有行。因此,在上面的输入中,第 1、2、4 和 5 行是第 3 行的子字符串,因此输出保留第 3 行。类似地,对于第 6、8、9 和 10 行上的字符串,它们都是第 7 行的子字符串,因此行7 被保留并写入输出。
最佳答案
也许:
input=./input_file
while read -r str
do
[[ $(grep -c "$str" "$input") == 1 ]] && echo $str
done < "$input"
产生:
GSAAQQYWTPANATFYGGSDASGT
IVPVNYARTTCRRTGGIRFTITGHDYFDN
它很慢 - 但很简单..
关于string - 删除属于其他行的子串的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35566642/