Bash 检查重复字符串并丢弃它们?

Bash 检查重复字符串并丢弃它们?,bash,shell,unix,Bash,Shell,Unix,我创建了两个文件,通过解析其他文件并删除相关信息。其中一个文件的行如下所示: Ahmed,Safdar:D433:181:20.40:30.00 Gonzales,Carlos:D433:7732:18.00:24.00 Thanhachammet,Chendrit:D500:5833:8.40:12.10 Bush,G:D500:8343:13.00:19.00 另一个: 343#2#8#011104 1958#2#9#011204 181##16#012404 773##4#012404

我创建了两个文件,通过解析其他文件并删除相关信息。其中一个文件的行如下所示:

Ahmed,Safdar:D433:181:20.40:30.00
Gonzales,Carlos:D433:7732:18.00:24.00
Thanhachammet,Chendrit:D500:5833:8.40:12.10
Bush,G:D500:8343:13.00:19.00
另一个:

343#2#8#011104
1958#2#9#011204
181##16#012404
773##4#012404
我想检查冒号分隔行的第三个字段是否与英镑符号分隔行的第一个字段匹配。如果是,我想生成匹配行的列表。我有点困在怎么做上了。这就是我尝试的:t

temp=$(mktemp)
dept=$(cut -d: -f3 "$tempDept")
pay=$(cut -d# -f1 "$tempPay")
if echo "$dept" | grep -w "$pay"; then
        cat "$dept" >> "$temp"
        cat "$pay" >> "$temp"
fi

使用
awk
,您可以说:

awk -F'[:#]' 'FNR==NR {_[$1];next} $3 in _' pound_separated_file colon_separated_file
对于您的输入,它将产生:

Ahmed,Safdar:D433:181:20.40:30.00
使用
join

$ cat 1
Ahmed,Safdar:D433:181:20.40:30.00
Gonzales,Carlos:D433:7732:18.00:24.00
Thanhachammet,Chendrit:D500:5833:8.40:12.10
Bush,G:D500:8343:13.00:19.00

$ cat 2
343#2#8#011104
1958#2#9#011204
181##16#012404
773##4#012404

$ sort -t: -k3 1 > 1a

$ sed 's/#/:/g' 2 | sort -t: -k 1 > 2a

$ cat 1a
Ahmed,Safdar:D433:181:20.40:30.00
Thanhachammet,Chendrit:D500:5833:8.40:12.10
Gonzales,Carlos:D433:7732:18.00:24.00
Bush,G:D500:8343:13.00:19.00

$ cat 2a
181::16:012404
1958:2:9:011204
343:2:8:011104
773::4:012404

$ join -t: -1 3 -2 1 1a 2a
181:Ahmed,Safdar:D433:20.40:30.00::16:012404

但这是上面的同一行…?@Whoppa你的问题是:
我想检查冒号分隔行的第三个字段是否与磅符号分隔行的第一个字段匹配。如果是,我想生成匹配行的列表。
。如果你加上预期的输出会有帮助的。我想你是对的,这是我的错,我是个白痴。如果它们匹配,我想将冒号线的第四个字段与磅线的第二个字段相乘。然后将其重定向到一个文件。有没有办法把你的awk放在if声明中?有点像if-awk;然后“$var”=4th:field*2nd#field | bc;var>>“$file”;fi@Whoppa当磅线中的第二个字段不包含任何值时,乘法因子是多少?@Whoppa请更新您的问题,而不是在注释中提供此信息。在bash中,您不必为已排序的文件创建临时文件,您可以使用:
join-t:-13-21