例如我有
a.txt
:
1 21 34
1 22 21
2 32 76
2 12 76
...
b.txt
:
1 99 73
1 32 27
2 55 76
2 76 12
...
预期产出:
$ ./some_script 1 a.txt b.txt
0 # matched
# compare data in #1 column of a.txt to data in #1 column of b.txt
# data: a.txt b.txt
# 1 1
# 1 1
# 2 2
# 2 2
$ ./some_script 2 a.txt b.txt
1 # not matched
$ ./some_script 3 a.txt b.txt
1 # not matched
其中参数1
,2
和3
是列号。
让我们说,some_script
只是对文件a.txt
和b.txt
中同一列中的数据进行了比较。
我需要一些用bash
,sed
或awk
(或其他可能的程序)编写的程序来完成这项工作。
答案 0 :(得分:3)
我会使用paste
和awk
的组合来实现
#!/bin/bash
[ -z "$1" -o -z "$2" -o -z "$3" ] && echo "Not enough arguments" && exit 1
[ ! -f "$2" -o ! -f "$3" ] && echo "input file(s) don't exist" && exit 1
awk -v var="$1" '$var!=$(NF/2+var){flag=1;exit}
END{print flag;}' <(paste "$2" "$3")
将文件另存为compare.sh
,使其成为可执行文件,然后像
./compare.sh 3 a.txt b.txt
答案 1 :(得分:2)
[ "$(cut -d' ' -f1 a.txt)" = "$(cut -d' ' -f1 b.txt)" ]; echo $?
<强>解释强>
[ "string1" = "string2" ]
- 测试命令。如果string1
等于string2
,则返回0
,否则返回1
。有关其他信息,请参阅man test
。cut -d' ' -f1 a.txt
- 剪切文件a.txt
中的第一列。
-d' '
- 将字段分隔符设置为空格。-f1
- 仅选择字段编号1
。在这种情况下,您可以使用变量而不是数字1
,例如num=1; [ "$(cut -d' ' -f$num a.txt)" = "$(cut -d' ' -f$num b.txt)" ]; echo $?
。echo $?
- 打印上次执行程序的退出状态。答案 2 :(得分:1)
简单的一行解决方案,包含bash和awk
#!/bin/bash
[ "$(awk -F' ' "{print \$$1}" "$2")" == "$(awk -F' ' "{print \$$1}" "$3")" ] && echo 0 || echo 1
<强>输出强>
./script 1 a.txt b.txt
0
./script 2 a.txt b.txt
1
./script 3 a.txt b.txt
1
答案 3 :(得分:0)
这是使用自定义文件描述符和数组的bash版本:
packagingOptions{
exclude 'builddef.lst'
exclude 'version.txt'
exclude 'isoparser-default.properties'
}