为什么grep可以';是否在shell脚本中筛选正确的行?
代码如下:为什么grep可以';是否在shell脚本中筛选正确的行?,shell,grep,Shell,Grep,代码如下: #!/bin/bash file=$(cat b.txt | tr "[:upper:]" "[:lower:]" | tr -c "[:alnum:]" '\n' | grep -v "^$") cat a.txt | while read line; do file=$(echo "$file" | grep -ov "$line") done echo "$file" | sort | uniq -c | sort -n 上面的a.txt是一个带有段落的文件,b.
#!/bin/bash
file=$(cat b.txt | tr "[:upper:]" "[:lower:]" | tr -c "[:alnum:]" '\n' | grep -v "^$")
cat a.txt | while read line; do
file=$(echo "$file" | grep -ov "$line")
done
echo "$file" | sort | uniq -c | sort -n
上面的a.txt是一个带有段落的文件,b.txt是一个每行都有一些单词的文件,我只想从a.txt中删除b.txt中的这些单词,而答案是错误的
例如:
b.txt
Hello, i want to go to school
hello
i
a.txt
Hello, i want to go to school
hello
i
预期结果:
1 go
1 school
1 want
2 to
1 go
1 hello
1 i
1 school
1 want
2 to
实际结果:
1 go
1 school
1 want
2 to
1 go
1 hello
1 i
1 school
1 want
2 to
而我的答案也包括b.txt中包含的单词。AWK方法:
awk 'BEGIN {
FS="[,[:space:]]";
}
{
if (NR==FNR) {
for(i=1;i<=NF;++i){
black[tolower($i)]=1;
}
next;
}
for (i=1; i<=NF; ++i) {
if ($i && black[tolower($i)]!=1) {
target[tolower($i)]+=1;
}
}
}
END {
for (i in target) {
print target[i], i;
}
}' a.txt b.txt
AWK进近:
awk 'BEGIN {
FS="[,[:space:]]";
}
{
if (NR==FNR) {
for(i=1;i<=NF;++i){
black[tolower($i)]=1;
}
next;
}
for (i=1; i<=NF; ++i) {
if ($i && black[tolower($i)]!=1) {
target[tolower($i)]+=1;
}
}
}
END {
for (i in target) {
print target[i], i;
}
}' a.txt b.txt
这是典型的子shell变量问题,由cat的无用使用引起。由于您正在将cat管道连接到while循环,并且管道在子shell中运行,因此对变量
文件
的赋值仅影响子shell。不修改原始变量。最简单的解决方法是边读边写;做完成
第二种解决方案是从子shell回显变量:
cat a.txt | { while read line; do
file=$(echo "$file" | grep -ov "$line")
done
echo "$file" | sort | uniq -c | sort -n
}
这是典型的子shell变量问题,由cat的无用使用引起。由于您正在将cat管道连接到while循环,并且管道在子shell中运行,因此对变量
文件
的赋值仅影响子shell。不修改原始变量。最简单的解决方法是边读边写;做完成
第二种解决方案是从子shell回显变量:
cat a.txt | { while read line; do
file=$(echo "$file" | grep -ov "$line")
done
echo "$file" | sort | uniq -c | sort -n
}
你能添加a.txt、b.txt的示例内容和你预期的结果吗对不起,添加了一个示例。你写的答案是错误的。你能发布正确的预期结果吗?对不起,我弄错了。我现在发布shell生成的答案和我的预期答案。文件中的单词是唯一的吗?然后你可以压缩文件并使用
uniq
选项只输出唯一/重复的单词。你能添加a.txt、b.txt和预期结果的示例内容吗对不起,添加了一个示例。你写的答案是错误的。你能发布正确的预期结果吗?对不起,我弄错了。我现在发布shell生成的答案和我的预期答案。文件中的单词是唯一的吗?然后,您可以对文件进行压缩,并使用uniq
选项仅输出唯一/重复的单词。非常感谢您给出了正确的答案,而我只想知道我的脚本为什么不起作用。很高兴它有帮助,只是小菜一碟。非常感谢您给出了正确的答案,而我只想知道我的脚本为什么不起作用。很高兴它有帮助,只是小菜一碟。非常感谢,这些解决方案帮助了我。非常感谢,这些解决方案帮助了我。