我有几个基因表达文件,按基因名称排序不正确。我可以手动浏览列表,然后使用sort对每个列表进行排序,但是我想自动执行该过程,以防我需要再次执行此操作(而且现在可以节省时间)。我遇到的主要问题是以某种方式将使用find选择正确文件的结果设置为可以迭代的列表。
我知道我可以使用以下代码按基因名称对文件进行排序:
sort -d -k1 -o fileName fileName
但是,我不太了解bash中的循环。
基本上我想执行此操作:
find ./ -type f \( -iname \*.tpm -o -iname \*.cnt \)
# somehow set the results of find to list I can iterate over
for fileName in fileList
do
sort -d -k1 -o fileName fileName
done
答案 0 :(得分:2)
fileList=$(find ./ -type f \( -iname \*.tpm -o -iname \*.cnt \))
for fileName in fileList
do
sort -d -k1 -o fileName fileName
done
如果文件名包含空格,请在执行此循环之前设置IFS=$'\n'
,以便将换行符用作分隔符。这样做可能会有更安全的方法。我提到了我所知道的最好的。
答案 1 :(得分:2)
使用-exec
的{{1}}功能:
find
find ./ -type f \( -iname \*.tpm -o -iname \*.cnt \) -exec sort -d -k1 -o {} {} \;
将在{}
部分扩展为文件名,而exec
将负责所有找到的文件的迭代。