使用Bash将word从一个文件复制到另一个文件
我正试图将一个文本文件中的特定单词复制到另一个文本文件中 这是我的用户名2.txt中的内容:使用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
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