鬼王 发表于 2020-1-8 15:49:39

求一个awk代码


有两个文件1.txt和2.txt
1.txt
a
c
e
f
h
......

2.txt
a      112121
b      2342435
c      53465454
d      354365546
e      4235446
f      3543656
g      32435465
h      433456756786
......
生成c.txt
a      112121
c      53465454
e      4235446
f      3543656
h      433456756786
......

pengjiandong 发表于 2020-1-8 18:54:43

本帖最后由 pengjiandong 于 2020-1-8 19:24 编辑

#将文件路径进行添加便可
f1 = open("C:\\Users\\pengjiandong\\Desktop\\python_exe\\1.txt",'r')
f2 = open("C:\\Users\\pengjiandong\\Desktop\\python_exe\\2.txt",'r')
f3 = open("C:\\Users\\pengjiandong\\Desktop\\python_exe\\3.txt",'w')
a = list(f1)
b = list(f2)
for i in a:
    for j in b:
      if i == j:
            f3.write(j)
f1.close()
f2.close()
f3.close()

manmanpython 发表于 2020-1-15 12:59:57

# 使用awk太麻烦了,不如用shell
#!/bin/bash
2 VAR=`cat 1.txt`
3 [ -e "c.txt" ] && cat /dev/null > c.txt || exit 1
4 for a in ${VAR}
5 do
6   grep "${a}" 2.txt >>c.txt
7 done

pokeyboa 发表于 2020-1-23 16:59:11

示例文件:
# cat 1.txt
a
c
e
f
h
# cat 2.txt
a      112121
b      2342435
c      53465454
d      354365546
e      4235446
f      3543656
g      32435465
h      433456756786


其他楼层,python和shell都可以实现。


另外,使用bash命令也可以,如下:
1、使用join命令再重定向到c.txt就可以:
# join 1.txt 2.txt
a 112121
c 53465454
e 4235446
f 3543656
h 433456756786

2、麻烦点的拼凑命令:
# cat 2.txt | grep -E $(cat 1.txt | xargs -n `cat 1.txt | wc -l` | sed 's/ /|/g') > c.txt

3、使用awk 好像用不太到:
# cat 2.txt | grep -E $(cat 1.txt | xargs -n `wc 1.txt | awk '{print $1}'` | sed 's/ /|/g') > c.txt      #强行用一下awk命令


结果:
# cat c.txt
a      112121
c      53465454
e      4235446
f      3543656
h      433456756786

陈某不吃辣 发表于 2020-1-30 16:21:36

哇 可以可以

qiuyouzhi 发表于 2020-2-3 10:50:22

看看

ll104567 发表于 2020-2-3 17:14:01

awk 'NR==FNR{a[$1]=1}NR!=FNR&&a[$1]' 1.txt 2.txt

TCY 发表于 2020-2-13 14:13:09

小白默默的看大神操作中……

璀璨·狸 发表于 2020-4-1 08:24:07

谢谢楼主

如果孤独感 发表于 2020-4-1 11:34:33

谢谢楼主
页: [1]
查看完整版本: 求一个awk代码