bash-阅读时与grep和cut合并

bash-阅读时与grep和cut合并,bash,Bash,我想修改现有的bash脚本。这就是它现在的样子: #! /bin/bash SAMPLE = myfile.txt while read SAMPLE do name = $SAMPLE # some other code done < $SAMPLE 给了我所需要的价值。但是如何将其集成到bash脚本中呢?您可以在读取时将任何命令的输出通过管道传输到循环中 试试这个: #! /bin/bash INPUT=myfile.txt grep 'TEST'

我想修改现有的bash脚本。这就是它现在的样子:

#! /bin/bash    
SAMPLE = myfile.txt

while read SAMPLE
do
    name = $SAMPLE
    # some other code
done < $SAMPLE

给了我所需要的价值。但是如何将其集成到bash脚本中呢?

您可以在读取时将任何命令的输出通过管道传输到
循环中

试试这个:

#! /bin/bash    
INPUT=myfile.txt

grep 'TEST' $INPUT | 
cut -d "," -f 1 | 
while read SAMPLE
do
    name=$SAMPLE
    # some other code
done

您可以在读取时将任何命令的输出通过管道传输到
循环中

试试这个:

#! /bin/bash    
INPUT=myfile.txt

grep 'TEST' $INPUT | 
cut -d "," -f 1 | 
while read SAMPLE
do
    name=$SAMPLE
    # some other code
done

您必须更改输入字段分隔符(IFS),它告诉
read
在哪里拆分输入行。然后告诉
read
读取两个字段:一个是您需要的字段,另一个是您不关心的字段

#! /bin/bash    
SAMPLE=myfile.txt

while IFS=, read SAMPLE dontcare
do
    name="$SAMPLE"
    # some other code
done < <(grep TEST "$SAMPLE")
#/bin/bash
SAMPLE=myfile.txt
当IFS=时,读取示例dontcare
做
name=“$SAMPLE”
#其他代码

完成<您必须更改输入字段分隔符(IFS),它告诉
读取
在哪里拆分输入行。然后告诉
read
读取两个字段:一个是您需要的字段,另一个是您不关心的字段

#! /bin/bash    
SAMPLE=myfile.txt

while IFS=, read SAMPLE dontcare
do
    name="$SAMPLE"
    # some other code
done < <(grep TEST "$SAMPLE")
#/bin/bash
SAMPLE=myfile.txt
当IFS=时,读取示例dontcare
做
name=“$SAMPLE”
#其他代码

完成<是否要检查每条线路是否有测试?然后对它执行一些操作?请您确认一下。正如风格说明:对两个不同的变量使用相同的名称通常不是一个好主意。在脚本中,输入文件名和从文件读取的值都使用
SAMPLE
。最好给他们起不同的名字(如我下面的回答)。你的代码不正确,
bash
中的作业在
=
的两边都不要留空格,试试看你想检查每一行是否有测试?然后对它执行一些操作?请您确认一下。正如风格说明:对两个不同的变量使用相同的名称通常不是一个好主意。在脚本中,输入文件名和从文件读取的值都使用
SAMPLE
。最好给他们起不同的名字(如我下面的回答)。你的代码不正确,
bash
中的作业不要在
=
的两边都留空格,试试看:如果你把
放在最后一行,你就不需要尾随“\”。谢谢你的提示@KamilCuk!我相应地修改了代码。管道的问题是,它创建了一个子外壳。这意味着
while
循环主体中的代码无法访问脚本环境。不能更改循环外的任何变量。这通常是不需要的。提示:如果您将
|
放在行尾,则不需要尾随“\”。谢谢您的提示@KamilCuk!我相应地修改了代码。管道的问题是,它创建了一个子外壳。这意味着
while
循环主体中的代码无法访问脚本环境。不能更改循环外的任何变量。这通常是不需要的。我只想扫描包含“TEST”的行。这就是为什么我需要grep@user1987607我添加了您的“测试”要求。我只想扫描包含“测试”的行。这就是为什么我需要grep@user1987607我增加了你的“测试”要求。