Vel*_*elu 13 diff awk text-processing
文件1:
123
234
345
456
Run Code Online (Sandbox Code Playgroud)
文件2:
123
234
343
758
Run Code Online (Sandbox Code Playgroud)
预期输出:文件 3:
TRUE
TRUE
FALSE
FALSE
Run Code Online (Sandbox Code Playgroud)
所以代码应该比较两个文件,如果匹配则打印“TRUE”,否则它应该在新文件中打印“FALSE”。任何人都可以为此提供解决方案吗?
αғs*_*нιη 56
diff在bash支持<(...) 进程替换的shell 或任何其他 shell 中使用如下命令,或者您可以如下所示模拟它:
diff --new-line-format='FALSE'$'\n' \
--old-line-format='' \
--unchanged-line-format='TRUE'$'\n' \
<(nl file1) <(nl file2)
Run Code Online (Sandbox Code Playgroud)
输出将是:
TRUE
TRUE
FALSE
FALSE
Run Code Online (Sandbox Code Playgroud)
--new-line-format='FALSE'$'\n',FALSE如果行不同,则打印,如果--old-line-format=''file1 的行不同,则禁用输出,这称为旧文件到 diff 命令(我们也可以交换这些,这意味着其中一个应该打印FALSE另一个应该被禁用。)
--unchanged-line-format='TRUE'$'\n', 打印TRUE行是否相同。在$'\n'C语言风格的逸出语法用于打印每行输出后一个新行。
Kus*_*nda 24
假设文件不包含制表符:
$ paste file1 file2 | awk -F '\t' '{ print ($1 == $2 ? "TRUE" : "FALSE") }'
TRUE
TRUE
FALSE
FALSE
Run Code Online (Sandbox Code Playgroud)
这用于paste创建两个制表符分隔的列,在任一列中包含两个文件的内容。该awk命令比较每行的两列,TRUE如果列相同则打印,否则打印FALSE。
Sté*_*las 10
假设两个文件的行数相同:
awk '{getline f2 < "file2"; print f2 == $0 ? "TRUE" : "FALSE"}' file1
Run Code Online (Sandbox Code Playgroud)
如果要比较的字符串是数字和词法,则进行数值比较。例如,100和1.0e2将被视为相同。更改为f2"" == $0在任何情况下都强制进行词法比较。
根据awk实现,词法比较将像使用memcmp()(字节到字节比较)或使用strcoll()(两个字符串是否在语言环境的排序规则中排序相同)进行。这可能会在某些语言环境中有所不同,其中某些字符的顺序没有正确定义,而不是像您的示例中的所有十进制数字输入。
with open('file1') as file1, open('file2') as file2:
for line1, line2 in zip(file1, file2):
print(line1 == line2)
Run Code Online (Sandbox Code Playgroud)
输出:
with open('file1') as file1, open('file2') as file2:
for line1, line2 in zip(file1, file2):
print(line1 == line2)
Run Code Online (Sandbox Code Playgroud)
如果需要TRUE并且FALSE大写,请用以下之一替换打印行:
print(str(line1 == line2).upper())
print('TRUE' if line1 == line2 else 'FALSE')
Run Code Online (Sandbox Code Playgroud)