gpt4 book ai didi

linux - 临时使用awk或grep时如何将文本转换为小写并忽略空格?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:08 24 4
gpt4 key购买 nike

我的脚本中有 2 个命令如下

awk -F'"(,")?' '
NR==FNR { r[$2] = $3; next }
{ for (n in r) gsub(n, r[n]) } 1' file2.csv file1.csv>xyzabc.csv

grep -v -f file3.txt xyzabc.csv>output.csv

所以基本上这些命令比较文件以产生所需的输出。我的问题是在比较时我希望比较以小写且没有空格进行,并且删除空格和转换为小写应该是临时的,即原始文本应该打印在输出文件中。例如:

file1:         file 2.csv:
I AM A MAN I am a man
I Like DoGs i like DOGS
I like cats I like cats

所以当使用上面提到的命令时,这些字符串是不相等的。我正在尝试使用 tr 'A-Z' 'a-z' 和 tr -d [:space:] 来完成这项工作,但是我在语法上苦苦挣扎。同样在比较完成后,我想完全按照 file2.csv 中提到的方式打印它,因此转换为小写和删除空格必须是临时的。谢谢

编辑:对于我的样本不是很清楚,我深表歉意。

所以file1包含以下数据:

file1.csv:
I am a man
I like dogs
I am a doctor
I like cats
I drink coffee

并且 file2.csv 包含以下数据:

file2.csv:
I am a man,man
I like dogs,dogs
I drink coffee,I drink tea

我在这两个文件上使用我的 awk 命令,所以它的作用是检查 file2.csv 第一列中的句子是否存在于 file1.csv 中,并将其替换为第二列中的内容file2.csv 并将输出放在不同的文件中。所以在进行搜索时,我希望它不区分大小写并且没有空格,因为 file2.csv 可能在单词之间包含多个空格,或者大小写可能不同。此外,在生成输出后,我不想更改 file1 和 file2 的内容。

至于 grep 命令,它是一个简单的查找和删除命令,它在两个文件中查找相同的字符串并将其删除。我也希望在没有空格的情况下进行比较,因为枯萎文件的单词之间可能存在多个空格。

最佳答案

awk '
function asKey(str, tmp) {
tmp = tolower(str)
gsub(/[[:blank:]]+/, " ", tmp)
return tmp
}
NR==FNR {f2[asKey($0)]; next}
asKey($0) in f2
' file2 file1

鉴于您的示例文件,这将返回 file1 中的所有行。

我注意到 不会用该正则表达式折叠空格。您可能希望将 /[[:blank:]]+/ 替换为 /[\t\r]+/

关于linux - 临时使用awk或grep时如何将文本转换为小写并忽略空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53415127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com