我的脚本中有两个命令,如下所示
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命令命令,这是一个简单的查找和删除命令,它在两个文件中查找相同的字符串并将其删除。我也希望在没有空格的情况下对此进行比较,因为凋零文件的单词之间可能存在多个空格。
答案 0 :(得分:0)
C-x r b
给出示例文件,这将返回file1中的所有行。
我注意到mawk不会用该正则表达式折叠空格。您可能希望将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:]]+/