如何将cut命令结果保存到文件中

时间:2019-02-01 12:34:04

标签: bash cut

我的问题很简单:

我用过:

for file in `/path/*_aa.fasta.aln; do cut -f 1 -d "|" ${file} > ${file}.1; done`

在这里,你可以看到我的结果存储在${file}.1,但如何做中庸之道它${file}直接?

2 个答案:

答案 0 :(得分:1)

尝试一下:

for file in "/path/*_aa.fasta.aln";
do 
    cut -f 1 -d "|" ${file} > ${file}.tmp; 
    mv  ${file}.tmp ${file}; 
done

答案 1 :(得分:1)

由于无法同时读写文件,因此需要保存/缓冲输出,然后将输出(输出)保存到文件中。

例如这样的示例(此操作仅删除/添加一个尾随的空换行符):

cmd file | { buf=$(cat); printf "%s\n" "$buf" } > file

或:

temp=$(mktemp)
cmd file > "$temp"
mv "$temp" file

或者如果您有sponge可以做到这一点:

cmd file | sponge file

因此您可以:

for file in /path/*_aa.fasta.aln; do 
    cut -f 1 -d "|" ${file} > ${file}.1
    mv ${file}.1 ${file}
done

或者如果您有sponge

for file in /path/*_aa.fasta.aln; do 
    cut -f 1 -d "|" "${file}" | sponge "${file}"
done

请注意:不要使用反引号``。使用命令替换$( ... )。反引号已弃用,不可读,并且在嵌套时变得更加不可读。