如何使用sed的grep结果

时间:2017-01-13 13:08:33

标签: bash sed grep

我有两个.dat文件。首先是文本ID:名称,第二个是ID:size。我必须创建第三个文件,ID:name:size。 我在终端上非常新,我做了类似的事情:

#!/bin/bash
egrep '[[:alnum:]]+:' file2.dat | sort > new.dat
cat new.dat > file2.dat
egrep '[[:alnum:]]+:' file1.dat | sort > new.dat
cat new.dat > file1.dat

while read -r line
do
    echo "$line" > temp
    egrep -o ':[[:alnum:]]+' temp
done < file2.dat

接下来的想法是使用sed的/ $ //'new.dat与文本中写的egrep相结合,但我无法得到它。

我的问题是,我是否可以通过其他方式进行操作,或者如何组合这些命令。

2 个答案:

答案 0 :(得分:2)

您可以查看man join,而不是在bash和grep中使用循环。

e.g。

file1.dat:

a:foo
b:bar
c:baz

File2.DAT的:

a:1
b:2

运行:

join -t : file1.dat file2.dat

或詹姆斯布朗建议(对于未分类的文件):

join -t : <(sort file1.dat) <(sort file2.dat)

得到:

a:foo:1
b:bar:2

答案 1 :(得分:1)

这是awk中的一个:

$ awk -F':' '$1 in a{print a[$1] FS $2;next}{a[$1]=$0}' f1 f2
a:foo:1
b:bar:2

说明:

awk -F':' '             # use : as field separator
$1 in a {               # if key in the first field has already been seen
    print a[$1] FS $2;  # output corresponding array (=record from f1) and $2 of f2
    next }              # no need to process this record further, skip to next
{
    a[$1]=$0            # store record from f1 to hash a using first field as a key
}' f1 f2