我有两个.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相结合,但我无法得到它。
我的问题是,我是否可以通过其他方式进行操作,或者如何组合这些命令。
答案 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