使用Bash将word从一个文件复制到另一个文件

使用Bash将word从一个文件复制到另一个文件,bash,awk,Bash,Awk,我正试图将一个文本文件中的特定单词复制到另一个文本文件中 这是我的用户名2.txt中的内容: jason,visitor mark,staff orlando,visitor 我正试图将jason和orlando复制到另一个txt文件中,所以它就像: jason orlando 这是当前我的bash脚本(截至目前,它只创建一个空白的txt文件): #/bin/bash username=“username2.txt” 当IFS=时,读取username1group1;做 如果[$group1

我正试图将一个文本文件中的特定单词复制到另一个文本文件中

这是我的用户名2.txt中的内容:

jason,visitor
mark,staff
orlando,visitor
我正试图将jason和orlando复制到另一个txt文件中,所以它就像:

jason
orlando
这是当前我的bash脚本(截至目前,它只创建一个空白的txt文件):

#/bin/bash
username=“username2.txt”
当IFS=时,读取username1group1;做
如果[$group1=“访问者”];然后
awk$username1$username>reportvisitors.txt
fi
完成<$username

这可以通过
awk
轻松完成,我们不需要使用while循环,因为
awk
本身可以读取输入文件本身

username=“username2.txt”
awk-F,'$2==“访问者”{print$1}'”$username“>“reportvisitors.txt”
解释:简单的解释是,将字段分隔符设置为
用于输入文件的所有行(这是一个名为
用户名
的shell变量)。然后在主程序内部检查条件
$2==“visitor”
,检查第二个字段是否为visitor,然后打印第一列。最后,此
awk
程序将输出发送到
reportvisitors.txt

替换

awk $username1 $username > reportvisitors.txt


更新

#!/bin/bash

username="username2.txt"

while IFS=, read username1 group1; do
 if [ "$group1" = "visitor" ]; then
   echo "$username1"
 fi
 done < $username > reportvisitors.txt
#/bin/bash
username=“username2.txt”
当IFS=时,读取username1group1;做
如果[“$group1”=“访问者”];然后
回显“$username1”
fi
完成<$username>reportvisitors.txt

您必须编辑第7行以

echo $username1 >> reportvisitors.txt
代码应该如下所示

#!/bin/bash
此部分确保已删除名为的现有文件

FILE=reportvisitors.txt
if test -f "$FILE"; then
    rm $FILE 
fi
从这里开始,我只编辑了第5行

username="username2.txt"

while IFS=, read username1 group1; do
    if [ $group1 = "visitor" ]; then
        echo $username1 >> reportvisitors.txt
    fi
done < $username
username=“username2.txt”
当IFS=时,读取username1group1;做
如果[$group1=“访问者”];然后
echo$username1>>reportvisitors.txt
fi
完成<$username

试过了,谢谢!愚蠢的问题,我只允许在这个场景中使用“echo”吗?如果你想输出变量的内容,你也可以使用
printf
。请参见
帮助打印f
。好的,无论如何,我如何使其覆盖?因为如果我重击它两次,它将显示名称twiceRemove
>reportvisitors.txt
,并将
>reportvisitors.txt
附加到您的
done
行中。我确实尝试过,但它只在reportvisitors.txt中显示orlando,jason不在任何地方。谢谢!也谢谢你的解释@Kinja如果接受这个答案,你的问题就解决了,不是吗?;-)好吧,不管怎样,我怎样才能让它覆盖呢?因为如果我重击它两次,它将显示两个名称。您可以在代码开头删除这些文件,但在第一次运行它时会收到一条错误消息。不管怎么说,它是有效的。或者添加一个if语句,这样如果有一个文件,它就是delet。我刚刚添加了我的答案。应该是这样。不是吗?
FILE=reportvisitors.txt
if test -f "$FILE"; then
    rm $FILE 
fi
username="username2.txt"

while IFS=, read username1 group1; do
    if [ $group1 = "visitor" ]; then
        echo $username1 >> reportvisitors.txt
    fi
done < $username