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

时间:2018-11-21 15:16:01

标签: linux awk grep tr

我的脚本中有两个命令,如下所示

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命令,所以它的作用是检查file1.csv中是否存在file2.csv第一栏中的句子,并将其替换为该文件第二栏中的内容。 file2.csv并将输出放置在另一个文件中。 因此,在执行搜索时,我希望它不区分大小写并且没有空格,因为file2.csv可能在单词之间包含多个空格,或者大小写可能不同。 另外,在产生输出之后,我不想更改file1和file2的内容。

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

1 个答案:

答案 0 :(得分:0)

C-x r b

给出示例文件,这将返回file1中的所有行。

我注意到不会用该正则表达式折叠空格。您可能希望将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 替换为/[[:blank:]]+/