![将选定的扩展连接到输出](https://linux22.com/image/77719/%E5%B0%86%E9%80%89%E5%AE%9A%E7%9A%84%E6%89%A9%E5%B1%95%E8%BF%9E%E6%8E%A5%E5%88%B0%E8%BE%93%E5%87%BA.png)
如何自动连接选定的扩展名以具有相同文件名但不同扩展名的输出?
输入文件(简化):
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。