bash for循环仅返回arra的xlength的最后一个值xtimes

时间:2018-09-24 21:16:48

标签: bash for-loop

我有一个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

2 个答案:

答案 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的更多帮助,请从信息页面开始。

答案 1 :(得分:1)

@glenn jackman的回答是迄今为止最简洁,最优雅的imo。但是,如果您要使用循环,则可以使用:

{{item.parameter | int}}

这应该适合您的用例,只要格式在您输入的内容和实际文件之间有效。