For loop Linux-通过每行上的每个元素进行循环

For loop Linux-通过每行上的每个元素进行循环,for-loop,awk,grep,For Loop,Awk,Grep,我有一个包含以下信息的文本文件: cat test.txt a,e,c,d,e,f,g,h d,A,e,f,g,h 我希望遍历每一行,然后为每一行打印与e不同的所有字符的索引。因此,理想的输出是使用制表符分隔符或逗号分隔符 1 3 4 6 7 8 1 2 4 5 6 or 1,3,4,6,7,8 1,2,4,5,6 我已经成功地遍历了每一行并打印了索引,但是结果被打印到同一行,并且没有分开 while read line;do echo "$line" | awk -

我有一个包含以下信息的文本文件:

cat test.txt
a,e,c,d,e,f,g,h
d,A,e,f,g,h
我希望遍历每一行,然后为每一行打印与e不同的所有字符的索引。因此,理想的输出是使用制表符分隔符或逗号分隔符

1 3 4 6 7 8
1 2 4 5 6

or

1,3,4,6,7,8
1,2,4,5,6
我已经成功地遍历了每一行并打印了索引,但是结果被打印到同一行,并且没有分开

while read line;do echo "$line" | awk -F, -v ORS=' ' '{for(i=1;i<=NF;i++) if($i!="e") {print i}}' ;done<test.txt

读行时
;对((i=1;i如果您不介意一些尾随空格,您可以执行以下操作:

while read line;do echo "$line" | awk -F, '{for(i=1;i<=NF;i++) if($i!="e") {printf i " "}; print ""}' ;done<test.txt

读行时,重复“$line”| awk-F,{for(i=1;我感谢你在问题中表现出你的努力(继续)。请您同时说明获得预期输出的逻辑是什么?这将使您的问题更加清楚,谢谢。我有两个文本文件,我需要使用与第一个文件模式不匹配的每行列的索引为第二个文件中的每行提取特定列。因此,这是一个明确的示例这个问题。这是否更清楚?不需要while循环。
awk
将为您迭代。您能详细说明一下吗?如何让awk为每行打印它?使用当前逻辑最简单的方法是添加
echo“”
awk
命令之后。实际上不需要输入重定向,对吗?您只需将文件名作为
awk
@accdias的最后一个参数传递即可。使用输入重定向的好处是,如果您也将输出重定向到文件,例如
awk'script'输出
,则如果无法打开输入,则返回put不会被创建/清空。缺点是您在文件名变量中没有输入文件的名称。IMHO pro通常不值得为1个输入文件设置con,并且您不能在具有多个输入文件的常见情况下使用它,因此它不值得使用,除非您有非常特殊的需要,例如您绝对必须这样做如果单个输入文件无法打开,则不清除输出文件。@accdias您是正确的,不需要重定向,我可能不应该保留它。这只是原始while loop.FWIW的剪切粘贴,我会使用
awk'BEGIN{FS=OFS=“,”}{out=“”;for(I=1;I
awk -F, '{for(i=1;i<=NF;i++) if($i!="e") {printf i " "}; print ""}' <test.txt
awk -F, '{m=0; for(i=1;i<=NF;i++) if($i!="e") {printf "%c%d", m++ ? " " : "", i }; print ""}' <test.txt