收了本論壇的三個例子
QUOTE:
1、用某一檔案的一個域替換另一個檔案中的的特定域?
http://bbs.chinaunix.net/forum/viewtopic.php?t=500015
檔案passwd:
s2002408030068:x:527:527::/home/dz02/s2002408030068:/bin/pw
s2002408032819:x:528:528::/home/dz02/s2002408032819:/bin/pw
s2002408032823:x:529:529::/home/dz02/s2002408032823:/bin/pw
檔案shadow:
s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:12676:0:99999:7:::
s2002408032819:$1$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:12676:0:99999:7:::
s2002408032823:$1$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:12676:0:99999:7:::
用shadow檔案中的密文部分替換passwd中的"x",生一個新passwd檔案,如下所示
s2002408030068:$1$d8NwFclG$v4ZTacfR2nsbC8BnVd3dn1:527:527::/home/dz02/s2002408030068:/bin/pw
s2002408032819:$1$UAvNbHza$481Arvk1FmixCP6ZBDWHh0:528:528::/home/dz02/s2002408032819:/bin/pw
s2002408032823:$1$U2eJ3oO1$bG.eKO8Zupe0TnyFhWX9Y.:529:529::/home/dz02/s2002408032823:/bin/pw
CODE:
awk 'BEGIN{OFS=FS=":"} NR==FNR{a[$1]=$2}NR>FNR{$2=a[$1];print}' shadow passwd
NR==FNR,第一個檔案shadow,以$1為下标,将$2的值賦給數組a
NR>FNR,第二個檔案passwd,将檔案shadow$2的值指派給檔案passwd
2、
cat file1:
0011AAA 200.00 20050321
0012BBB 300.00 20050621
0013DDD 400.00 20050622
0014FFF 500.00 20050401
cat file2:
I0011 11111
I0012 22222
I0014 55555
I0013 66666
規則:比較 file1的1-4字元 和 file2的2-5 字元,如果相同,将file2 的第二列 與 file1 合并 file3
0011AAA 200.00 20050321 11111
0012BBB 300.00 20050621 22222
0013DDD 400.00 20050622 66666
0014FFF 500.00 20050401 55555
awk 'NR==FNR{a[substr($1,2,5)]=$2}NR>FNR&&a[b=substr($1,1,4)]{print $0, a[b]}' file2 file1 >file3
3、如果檔案a中包含檔案b,則将檔案b的記錄列印出來
http://bbs.chinaunix.net/forum/viewtopic.php?t=520411
檔案a:
10/05766798607,11/20050325191329,29/0.1,14/05766798607
10/05767158557,11/20050325191329,29/0.08,14/05767158557
檔案b:
05766798607
05766798608
05766798609
通過檔案a和檔案b對比,導出這樣的檔案出來.
a
wk -F'[/,]' 'ARGIND==1{a[$0]}ARGIND>1{($2 in a);print $0}' b a
awk -F'[/,]' 'NR==FNR{a[$0]}NR>FNR{($2 in a);print $0}' b a
4、
file1檔案内容
1 0.5 100
10 15 36.5
file2檔案
50 10 9
3.2 1 5
将兩個檔案合成一個檔案如:
51 10.5 109
13.2 16 41.5
就是對應的字段進行相加以後的數字。
awk '{for (i=1;i=$i
getline for (i=1;i" ";
printf $NF+a[NF] "\n"}' file1
awk '{for (i=1;i
5、
檔案a
1000 北京市 地級 北京市 北京市
1100 天津市 地級 天津市 天津市
1210 石家莊市 地級 石家莊市 河北省
1210 晉州市 縣級 石家莊市 河北省
1243 灤縣 縣級 唐山市 河北省
1244 灤南縣 縣級 唐山市 河北省
b檔案:
110000,北京市
120000,天津市
130000,河北省
130131,平山縣
130132,元氏縣
這樣的字段
a中第二列在b中可能有可能沒有,需要把有的比對起來生成新的一列:要包含a和b的第一列。沒有比對的按照b原來的格式進行輸出。
awk 'BEGIN{FS="[ |,]";OFS=","}NRFNR{print $1,$2,a[$2]}' a b
6、
file1的第一列與file2的第3列相同,
file1的第二列與file2的第4列的3-5位相同,
file1的第三列與file2的最後一列相同,
# cat file1
AAA 001 1000.00
BBB 001 2000.00
DDD 002 4000.00
EEE 002 5000.00
FFF 003 6000.00
# cat file2
01 1111 AAA WW001 $$$$ 1000.00
02 2222 BBB GG001 %%%% 2000.00
03 3333 CCC JJ001 **** 3000.00
04 4444 DDD FF002 &&&& 4000.00
05 5555 EEE RR002 @@@@ 5000.00
06 666 FFF UU003 JJJJ 6000.00
07 777 III II005 PPPP 7000.00
08 8888 TTT TT008 TTTT 8000.00
# awk 'NR> NR>FNR{b=substr($4,3);c=$3"x"b"x"$6;if(c==a[$3]) print}' file1 file2
閱讀(2143) | 評論(1) | 轉發(1) |