我有包含3列的.csv文件。我想从.csv文件的第二列中提取“ .tif”文件的名称。在这些名称中搜索存储在folder_A的不同子文件夹中的图像文件,然后将所有这些文件复制到folder_B。 我想用shell脚本来做。有帮助吗?
instance_identifier,Image_name,therapeutic_class
DMSO_0_26247_p12_ER_s4,cdp2w9x2_p12_s4_w2e7e45247-7535-47c6-9125-62c2ecb0f440.tif,control
DMSO_0_26247_p12_ER_s5,cdp2w9x2_p12_s5_w2f724ded3-24a8-466a-b578-539f79140a8b.bmp,control
DMSO_0_26247_p12_ER_s6,cdp2w9x2_p12_s6_w2794d1ed4-bbb9-4790-b082-324ad7dc8438.tif,control
DMSO_0_26247_p12_Mito_s1,cdp2w9x2_p12_s1_w5b288b243-7189-41f0-993e-4444faac5197.png,control
DMSO_0_26247_p12_Mito_s2,cdp2w9x2_p12_s2_w522e6faa1-729a-4272-b476-4ec27d3459ca.tif,control
我尝试过类似的操作,但是我无法指定.tif文件并且没有成功
#!/bin/bash
while IFS=',', read -r instance_identifier Image_name therapeutic_class;
do
echo "$Image_name"
find /folder_A/ -name "${Image_name}" -exec cp '{}' /folder_B \;
done < image_exp_details.csv
答案 0 :(得分:0)
您可以使用awk过滤第2列中包含.tif
的行
$ cat /tmp/file
# Table looks like
#header1 header2 header3
#name1 aa1.jpg positive
#name2 aa2.tif positive
#name3 aa3.bmp negative
#name4 aa4.tif positive
#name5 aa5.tif negative
$ awk '$2~/\.tif$/' /tmp/file
#name2 aa2.tif positive
#name4 aa4.tif positive
#name5 aa5.tif negative
给出更新后的输入:
$ awk -F, '$2~/\.tif$/{print $2}' /tmp/file
cdp2w9x2_p12_s4_w2e7e45247-7535-47c6-9125-62c2ecb0f440.tif
cdp2w9x2_p12_s6_w2794d1ed4-bbb9-4790-b082-324ad7dc8438.tif
cdp2w9x2_p12_s2_w522e6faa1-729a-4272-b476-4ec27d3459ca.tif
答案 1 :(得分:0)
grep
/ xargs
将使其运行更快。
grep -Eo '[^,]+[.]tif' image_exp_details.csv |
xargs -IFileName find -name FileName -exec mv {} /folder_B/ \;
这可能需要一些路径调整。如果不在/folder_A/
中,则需要从image_exp_details.csv
运行到/folder_A/
的完整路径。
我假设您只希望TIFF列在CSV中,并且您不想移动其他TIFF,是吗?