使用bash迭代排序和替换文件

时间:2019-08-30 14:59:31

标签: linux bash loops

我有几个基因表达文件,按基因名称排序不正确。我可以手动浏览列表,然后使用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

2 个答案:

答案 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将负责所有找到的文件的迭代。