Chinaunix

标题: sed and awk sos [打印本页]

作者: 1cpuer    时间: 2018-01-14 09:44
标题: sed and awk sos
本帖最后由 1cpuer 于 2018-01-15 10:42 编辑

http://blog.csdn.net/msw521sg/article/details/53212508

sed -rn '/^[^0-9]/H;/^[0-9]/{G;/(.)( .)( .)\n\n.\2( [^ ])( [^ ]).*/s//\1\2\3\4\5/p}' b.txt a.txt

kong de
awk ye shi

# [ /home/soio/1bs/awks ] {2018-01-15 10:24:31} : 1515983071:0;
# sed -rn '/^[^0-9]/H;/^[0-9]/{G;/(.)( *)( [^ ]*)\n\n.\2( [^ ]*)( [^ ]*).*/s//\1\2\3\5/p}' b.txt a.txt
01 12510101 4001 2006/02/15
02 12310001 4002 2006/02/15
03 12550101 4003 2006/02/15
04 12610001 4004 2006/02/15
05 12810001 4005 2006/02/15
06 12310001 4006 2006/02/15
07 12710001 4007 2006/02/15
08 12310001 4008 2006/02/15
09 12810101 4009 2006/02/15
10 12510101 4010 2006/02/15
11 12310001 4011 2006/02/15
12 12610001 4012 2006/02/15
13 12310001 4013 2006/02/15


# [ /home/soio/1bs/awks ] {2018-01-15 10:24:53} : 1515983093:0;
# sed -rn '/^[^0-9]/H;/^[0-9]/{G;/(.)( *)( [^ ]*)\n\n.\2( [^ ]*)( [^ ]*).*/s//\1\2\3\4\5/p}' b.txt a.txt
01 12510101 4001 12410101 2006/02/15
02 12310001 4002 12410101 2006/02/15
03 12550101 4003 12410101 2006/02/15
04 12610001 4004 12410101 2006/02/15
05 12810001 4005 12410101 2006/02/15
06 12310001 4006 12410101 2006/02/15
07 12710001 4007 12410101 2006/02/15
08 12310001 4008 12410101 2006/02/15
09 12810101 4009 12410101 2006/02/15
10 12510101 4010 12410101 2006/02/15
11 12310001 4011 12410101 2006/02/15
12 12610001 4012 12410101 2006/02/15
13 12310001 4013 12410101 2006/02/15


# [ /home/soio/1bs/awks ] {2018-01-15 10:36:10} : 1515983770:0;
# cat a1.txt
01 c1 4001
02 c2 4002


# [ /home/soio/1bs/awks ] {2018-01-15 10:37:42} : 1515983862:0;
# cat b1.txt
A c1 2006/02/15 2009/01/31 4002
B c2 2006/08/31 2008/08/29 4001
C c6 2008/05/23 2008/05/22 4002
D c8 1992/12/10 1993/06/30 4001
E c6 1992/05/11 1993/06/01 4005

# [ /home/soio/1bs/awks ] {2018-01-15 10:35:36} : 1515983736:0;
# sed -rn '/^[^0-9]/H;/^[0-9]/{G;/(.)( *)( [^ ]*)\n\n.\2( [^ ]*)( [^ ]*)( [^ ]*).*/s//\1\2\3\5\6/p}' b1.txt a1.txt
01 c1 4001 2006/02/15 2009/01/31
02 c2 4002 2006/02/15 2009/01/31



作者: wh7211    时间: 2018-01-14 16:37

$ cat 1
01 12510101 4001
02 12310001 4002
03 12550101 4003
04 12610001 4004
05 12810001 4005
06 12310001 4006
07 12710001 4007
08 12310001 4008
09 12810101 4009
10 12510101 4010
11 12310001 4011
12 12610001 4012
13 12310001 4013

$ cat 2
A 12410101 2006/02/15 2009/01/31 4002
B 12310001 2006/08/31 2008/08/29 4001
C 12610001 2008/05/23 2008/05/22 4002
D 12810001 1992/12/10 1993/06/30 4001
E 12660001 1992/05/11 1993/06/01 4005

需求:文件1中第二个字段的内容存在于文件2中的第二个字段的话就输出该行,并把文件2中的两个日期内容添加在该行后:
02 12310001 4002  2006/08/31 2008/08/29
04 12610001 4004  2008/05/23 2008/05/22
05 12810001 4005  1992/12/10 1993/06/30
06 12310001 4006  2006/08/31 2008/08/29
08 12310001 4008  2006/08/31 2008/08/29
11 12310001 4011  2006/08/31 2008/08/29
12 12610001 4012  2008/05/23 2008/05/22
13 12310001 4013 2006/08/31 2008/08/29
  1. awk 'NR==FNR{a[$2]=$3" "$4;next}a[$2]{print $0,a[$2]}' 2 1
复制代码




作者: jason680    时间: 2018-01-14 17:34
回复 1# 1cpuer

the $ was gone

$ awk 'FNR==NR{a[$2]=$3 FS $4;next}{if($2 in a)print $0,a[$2]}' b.txt a.txt
02 12310001 4002 2006/08/31 2008/08/29
04 12610001 4004 2008/05/23 2008/05/22
...

$ head -n4 b.txt a.txt
==> b.txt <==
A 12410101 2006/02/15 2009/01/31 4002
B 12310001 2006/08/31 2008/08/29 4001
C 12610001 2008/05/23 2008/05/22 4002
D 12810001 1992/12/10 1993/06/30 4001

==> a.txt <==
01 12510101 4001
02 12310001 4002
03 12550101 4003
04 12610001 4004






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2