使用ksh脚本尝试比较我得到的两个文件。我尝试过使用comm,diff和grep,但无法得到我想要的结果。我可以在下面显示我想要做的事情。
此时就把one.txt存盘
name1
name2
two.txt
name1|email1
name2|email2
name3|email3
我尝试过使用grep -f但是我的机器上有非法选项,所以我正在寻找不同的东西。无论如何我可以查看文件中的一个并查看这些字符串,然后查看文件二并查看匹配的字符串并从two.txt中取出第二个值,这样看起来像这样吗?
three.txt
email1
email2
感谢帮助
答案 0 :(得分:1)
for entry in $(cat one.txt)
do
grep $entry two.txt| awk -F"|" '{print $NF}'
done > three.txt
答案 1 :(得分:1)
join
看起来像是一份工作。如果文件已经排序(如示例数据中所示):
join -t '|' -o 2.2 one.txt two.txt
如果文件尚未排序,并且您的Bash或Korn shell包含process substitution:
join -t '|' -o 2.2 <(sort one.txt) <(sort two.txt)
如果您没有使用流程替换的Bash或Korn shell:
tmp=$(mktemp ${TMPDIR:-/tmp}/j.XXXXXX)
trap "rm -f $tmp.?; exit 1" 0 1 2 3 13 15
sort one.txt > $tmp.1
sort two.txt > $tmp.2
join -t '|' -o 2.2 $tmp.1 $tmp.2
rm -f $tmp.?
trap 0
(你可以使用一个临时文件,但这是对称的,这使得它更加清晰。)
答案 2 :(得分:0)
试试这个:
$ cat one.txt
name1
name2
$ cat two.txt
name1|email1
name2|email2
name3|email3
$ cat filter.ksh
#! /usr/bin/ksh
for LINE in $(cat one.txt); do
sed -n "s/$LINE|//p" two.txt
done
$ ./filter.ksh
email1
email2