将选定的扩展连接到输出

将选定的扩展连接到输出

如何自动连接选定的扩展名以具有相同文件名但不同扩展名的输出?

输入文件(简化):

File1.txt
File1.csv
File1.tsv
File2.txt
File2.csv
File2.gff

操作:将 *.txt 和 *.csv 文件连接成 *.merged 文件(保留原始文件名,但扩展名不同):

cat File1.txt File1.csv > File1.merged
cat File2.txt File2.csv > File2.merged

所需的输出文件:

File1.merged
File2.merged

答案1

重击:

txt_files=( *.txt )
for f in "${txt_files[@]}"; do 
    root=${f%%.*}
    [[ -f "$root.csv" ]] && cat "$root.txt" "$root.csv" > "$root.merged"
done

答案2

这是一个简单的做法:

ls --ignore=*.tsv | grep File1 | xargs -d "\n" cat >> file.merged

或者

find . -not -name "*.tsv" -name "File1*" | xargs -d "\n" cat >> file.merged

ls列出所有文件,但忽略以 .gff 结尾的文件。grep整理出除 File1 之外的所有其他内容。然后将文件名输入到 cat 命令中,并将>>它们附加到 file.merged

这个唯一的缺点是您必须运行它两次,一次针对 File1,一次针对 File2。

相关内容