我有两个文件,即 file1 和 file2。
file1:
91 | 2018-10-11 16:07:14 | bkwdv | 188.0000 |
77 | 2018-10-12 15:05:15 | wvwef | 94.0000 |
file2:
77 | 2018-10-12 15:05:15 | wvwef | 94.0000
91 | 2018-10-11 16:07:14 | bkwdv | 188.0000
我想将 file1 的第一列与 file2 的第一列进行比较。
如果字符串匹配(无论顺序如何,如给定的输入数据),它应该打印“成功”,否则“退出”。因此,根据给定的输入数据,它应该打印“成功”。
请注意,两个文件中第一列的行数可能有所不同,因此在这种情况下,它应该退出。
答案1
从每个文件中提取第一列,对它们进行数字排序,然后比较它们:
awk '{ print $1 }' <file1 | sort -n >file1.col1
awk '{ print $1 }' <file2 | sort -n >file2.col1
if cmp -s file1.col1 file2.col1; then
echo 'success'
else
echo 'exit'
fi
rm file1.col1 file2.col1
或者,使用bash
特定语法:
if cmp -s <( awk '{ print $1 }' <file1 | sort -n ) \
<( awk '{ print $1 }' <file2 | sort -n )
then
echo 'success'
else
echo 'exit'
fi
该cmp -s
命令不会输出任何内容,但如果两个文件操作数具有相同的内容,则会成功退出。我们在if
语句中使用它来确定两个文件的排序第一列是否相同。
awk '{ print $1 }'
cut -d ' ' -f 1
如果第一列中的数字后面的空白字符是空格字符,则上面代码中的内容也可以替换为空格字符。
答案2
和我对你问题的回答类似这里
#!/bin/bash
var=$(cut -d"|" -f 1 file | sort -k1.1n)
var1=$(cut -d"|" -f 1 file | sort -k1.1n)
if [ "$var" == "$var1" ]
then
echo "success"
else
exit
fi
解释
答案3
您可以使用 检查排序文件中不可配对的行join
,并测试结果是否为空字符串:
[[ -z "$(join -t '|' -v1 -v2 <(sort file1) <(sort file2))" ]] && echo "success" || echo "exit"
答案4
那么在这样的条件下
- 猫两个文件
- 排序 -n 唯一
- 计算结果行数
如果您获得的数字与两个文件中的行数相同,那么您就成功了。
N1=$(cat file1 |wc -l) ;N2=$(cat file2 |wc -l); N3=$(cat file1 file2 |sort -nu |wc -l); echo $N1 $N2 $N3
如果你需要得到结果: success / exit ,你必须自己比较 N1、N2、N3。当然,建议在开始收集结果 N3 之前先比较 N1 和 N2,如果相等,然后继续,则只比较 N1 和 N3(因为您开始计算 N3,这就是为什么 N1==N2) 。