我有一个ID如下的文件:
A
D
E
第二个文件具有相同的ID和所需的其他信息:
A 50 G25T1 7.24 298
B 20 G234T2 8.3 80
C 5 G1I1 5.2 909
D 500 G458T3 0.4 79
E 321 G46I2 45.8 901
我想通过使用第一个文件中的ID选择第二个文件的第一列来输出第二个文件的第三列:
G25T1
G458T3
G46I2
我的问题是for循环运行时,输出如下:
G46I2
G46I2
G46I2
这是我的代码:
a=0; IFS=$'\r\n' command eval 'ids=($(awk '{print$1}' shared_single_copies.txt | sed -e 's/[[:space:]]//g'))'; for id in "${ids[@]}"; do a=$(($a+1)); echo $a' '"$id"; awk '{$1=="${id}"} END {print $3}' run_Busco_A1/A1_single_copy_ids.txt >> A1_genes_sc_Buscos.txt; done
答案 0 :(得分:2)
您的代码太复杂了。请尝试以下解决方案之一:“ file1”包含id,“ file2”包含额外信息:
function getImage(){
var folderImage = DriveApp.getFolderById("0B7gxdApLS0TYfm1pRHpHSG4yTm96bm1PbTZQc1VmdGpxajY4N1J4M1gtR1BiZ0lOSl9NMjQ");
Logger.log(folderImage.getFiles().next().setSharing(DriveApp.Access.ANYONE, DriveApp.Permission.VIEW));
Logger.log(folderImage.getFiles().next().getSharingAccess());
Logger.log(folderImage.getFiles().next().getSharingPermission());
var imageFile = folderImage.getFiles().next().getBlob();
detailSheet.insertImage(imageFile, 1, 13);
}
$ join -o 2.3 file1 file2
G25T1
G458T3
G46I2
有关$ awk 'NR==FNR {id[$1]; next} $1 in id {print $3}' file1 file2
G25T1
G458T3
G46I2
的更多帮助,请查看手册页。
有关join
的更多帮助,请从awk信息页面开始。
答案 1 :(得分:1)
@glenn jackman的回答是迄今为止最简洁,最优雅的imo。但是,如果您要使用循环,则可以使用:
{{item.parameter | int}}
这应该适合您的用例,只要格式在您输入的内容和实际文件之间有效。