Loops 对所有列重复awk和if语句

Loops 对所有列重复awk和if语句,loops,if-statement,awk,Loops,If Statement,Awk,我有一个超过50列的文件,我只想输出所有列中最后一个字符等于1的字段。如何为所有列循环下面显示的if语句 awk '{if(substr($0,length($0),1) == 1) print $0}' file_with_one_column.tsv 额外信息: (1) 分隔符:制表符 (2) 输出格式:与输入相同的列数(不包括最后一个字符!=1的字段)。i、 没有一行输出 (3) 所有列中的行数相同 (4) 问题:某些字段仅包含“.”字符 我在尝试使用for循环时遇到了这个问题 awk

我有一个超过50列的文件,我只想输出所有列中最后一个字符等于1的字段。如何为所有列循环下面显示的if语句

awk '{if(substr($0,length($0),1) == 1) print $0}' file_with_one_column.tsv 
额外信息: (1) 分隔符:制表符 (2) 输出格式:与输入相同的列数(不包括最后一个字符!=1的字段)。i、 没有一行输出 (3) 所有列中的行数相同 (4) 问题:某些字段仅包含“.”字符

我在尝试使用for循环时遇到了这个问题
awk:1:意外字符'。

输入示例:

ENSG00000267601.1    ENSG00000256861.1    ENSG00000259953.2
DGCR8_H_2_2          .                    SAFB2_K_1_2
IGF2BP3_H_1_1        DDX6_K_1_2           LIN28B_H_1_2
NKRF_H_2_2           PPIL4_K_2_2          LIN28B_K_1_1
IGF2BP1_H_2_2        CDC40_H_1_2          LIN28B_K_2_1
POLR2G_H_2_2         IGF2BP3_H_1_2        .
期望输出:

ENSG00000267601.1    ENSG00000256861.1    ENSG00000259953.2
IGF2BP3_H_1_1                             LIN28B_K_1_1
                                          LIN28B_K_2_1
像这样:

awk '{for(i=1;i<=NF;i++){if(substr($i,length($i),1)=="1") print $i}}' file.tsv

awk'{for(i=1;i您尝试了哪个答案?我下面的答案很好我尝试了所有建议,但出现了错误(awk:1:意外字符“”)。您的建议只对第1列有效,但对其他列无效。当我尝试使用for循环时,我遇到了这个问题。您是如何尝试使用
for
循环的?当您尝试使用awk执行数据时,这看起来像是一个错误。您调用awk的方式有些地方您没有与我们共享t(例如,可能您将其存储在变量中,然后尝试使用它,或者从python或DOS或其他方式调用它)因为脚本中没有任何东西会在编写时从shell调用时生成错误。如果您是从shell脚本调用它,那么错误就在shell脚本的其他地方,可能是缺少引号或调用awk之前的某个地方。复制/粘贴脚本以查看是否发现任何错误。如果然后创建一个最小的、完整的shell脚本(假设您正在使用shell脚本)来产生错误,并将其发布到您的问题中,以便我们可以帮助您调试它。我的一些列只包含“”字符。我收到了这个错误:awk:1:意外的字符“”。@Jan然后你复制/粘贴错误,或者你调用awk的方式有些东西你还没有与我们共享,因为脚本中没有任何东西会生成错误,如果它只是按照写的那样从shell调用。我已经尝试了最新的建议,并且我得到了想要的结果。谢谢@hek2mgl
#!/bin/bash
awk '{
    found = 0
    for(i=1;i<=NF;i++){
        if(substr($i,length($i),1) == "1") {
            printf "%s%s", (found?OFS:""), $i
            found = 1
        }
    }
    if(found) {
        printf "%s", ORS
    }
}' file.tsv