日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

awk 实例

發(fā)布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 awk 实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

問:


123 def1 456

345 dxd2 812

123 CKD 563

322 ef4 684

123 dxkds 879

?

?

結(jié)果是:

123 def1 1898

345 dxd2 812

322 ef4 684

?

解:

awk '{a[$1]+=$3;if(!b[$1])b[$1]=$2}END{for(i in a)print i,b[i],a[i]}' test1

?

?

問:

如何將

1. a 1

2. b 2

3. c 3

4. a 2

5. c 1

6. b 5

7. a 9

8. b 10

9. c 15

轉(zhuǎn)換成

1. a 1,2,9

2. b 2,5,10

3. c 3,1,15

解 1 :

awk '{a[$1]=a[$1]?a[$1]","$2:$1" "$2}END {for (i in a) print a[i]}' file

?

解 2 :

cat test.txt |sort -n|xargs -l3|sed -e 's/ [a-z] /,/g'

?

解 3 :

#!/usr/bin/perl -w

use strict;

open FILE_1,"<tmp_1" or die "Can not open file tmp_1:$!";

my %hash;

while(<FILE_1>)

{ chomp;

my ($f,$s) = split;

push @{$hash{$f}},$s;

}

for (keys %hash)

{

print "$_ ",join ",",@{$hash{$_}};

print "/n";

}

?

問:

有一文本,如下:

abc 這是中文 123

456 這也是中文 xyz

?

其中的中文換成問號,結(jié)果如下:

?

abc????123

456?????xyz

?

解:

sed 's/[^a-zA-Z0-9]/?/g' file

?

?

?

統(tǒng)計(jì)目錄中的最小數(shù)字文件。

?

解 1 :

#!/bin/bash

?

cd $1

for filename in `ls`

do

if [ -d $filename ];then

cd $filename

lastfile=`ls | sort | tail -n 1`

echo -e "$PWD/t$lastfile"

cd ..

fi

done

?

解 2 :

find {1..9999} -name "*.jpg" | sort -t/ -k3nr | awk -F'/' '!a[$1$2]++'

?

問:

文件如下

PBCSPOFT0101 0

PBCSPOFT0101 96

PBCSPOFT0102 0

PBCSPOFT0102 6

PBCSPOFT0103 0

PBCSPOFT0103 8

PBCSPOFT0104 0

PBCSPOFT0105 0

PBCSPOFT0106 0

PBCSPOFT0107 0

PBCSPOFT0107 10

PBCSPOFT0108 0

我想刪除第一個字段重復(fù)的且第二個字段為 0 的行 , 結(jié)果應(yīng)該如下

PBCSPOFT0101 96

PBCSPOFT0102 6

PBCSPOFT0103 8

PBCSPOFT0104 0

PBCSPOFT0105 0

PBCSPOFT0106 0

PBCSPOFT0107 10

PBCSPOFT0108 0

?

?

?

?

?

?

解 1 :

awk '/pattern/ {print substr($10,1,index($10,"?"))}' access_log |sort |uniq

?

解 2 :

awk '{a[$0]=$0;if((b[$1]=$2)==0) b[$1]=$2; next} END {for (i in a) if ((b[substr(i,0,index(i," ")-1)]==0)||(substr(i,index(i," ")+1) !~/^[ ]+0$/)) print a[i]}' file1

?

?

解 3 :

sort -k1,1 -k2,2nr 數(shù)據(jù)文件 | awk '!(a[$1]++ && !$2)'

思路是把原文件按照第一字段、第二字段逆序的方式排序

!(a[$1]++ && !$2) 的邏輯就是,排除 第一字段出現(xiàn)過且第二字段為 0

?

解 4 :

awk 'NR==FNR{a[$1]++;next}$2!=0||a[$1]==1' urfile urfile

?

把 abc 目錄下的所有文件打包成以原文件命名加后綴 .tar 文件

?

解 1 :

1. find abc -type f -exec tar -cvf "{}.tar" {} /;

?

解 2 :

2. ls | xargs -I% tar -cvf %.tar %

?

批量文件改名問題

rename .old .new *

mv $files `echo $files|tr .old .new`

rename 's//.java$/.log/' *.java

for file in *.txt;do mv "$file" ${file%.*}.doc ; done

?

?

?

怎么把一列合成一行

例如: 11

22

33

輸出為: 11 22 33

?

解 1 :

awk '{printf "%s ",$0}' file

?

解 2 :

sed ':s N; $!bs; s//n/ /g' file

?

解 3 :

echo -n `cat file`

?

解 3 : ( 根據(jù)實(shí)際需要調(diào)整 )

xargs -n5 < file

?

解 4

awk '{ORS=" "}1' file

?

解 5

paste -s urfile

?

解 6

awk '{printf $0 FS}' file

?

?

##############################################################################################################################

ls -l|awk 'BEGIN {FS=":"} {if (($4==02) && ($7 < 26435)) print "rm" $0}'|rm -f

ls -l |awk -F. '$4=="02"&&$7<"26435" '{print "rm -rf "$NF}'|sh

##############################################################################################################################

?

?

問:比較兩個文件的某幾個字段的問題

file1

111 222 333 444 xxx

eee fff ggg hhh xxx

iii jjj kkk lll xxx

?

file2

111 222 333 444 yyy

555 666 777 888 yyy

111 222 444 333 yyy

555 666 888 999 yyy

aaa bbb ccc ddd yyy

eee fff ggg hhh yyy

iii jjj kkk lll yyy

?

result

555 666 777 888 yyy

111 222 444 333 yyy

555 666 888 999 yyy

aaa bbb ccc ddd yyy

?

解 1 :

awk 'NR==FNR {a[$1$2$3]=$1$2$3} NR>FNR {if (a[$1$2$3]!=$1$2$3) print $0}' file1 file2

?

解 2 :

awk '{NF=NF-1}1' file1.txt|grep -vf- file2.txt

?

問:

如何把多行并作一行

a

b 。

c

d

e 。

f

g

h

i

j 。

k

l 。

多行并作一行,如果不是句號結(jié)尾,則并作一行。假設(shè)換行符是 /n ,其中句號時中文句號。

> cat file.txt

a b 。

c d e 。

f g h i j 。

k l 。

?

?

解 1 :

awk '$1=$1' RS= 。 ORS= 。 //n file

?

解 2 :

awk '{if(/ 。 $/)print;else printf $0" "}' file

?

解 3 :

sed ':n;/ 。 /!{N;bn};s//n/ /g' urfile

解 4 :

awk '{printf $0" "}/ 。 /{print ""}' file

?

?

解 5 :

awk '$0~/ 。 $/{print;next}{printf $0}' file

?

?

2 個文件比較

?

請教如下問題,由于行數(shù)很多,所以效率越高越好

a 文件

23232

454654

7687898

453454

?

b 文件

fdfd 23232 fdfdasd dsds dasdfdfd grthjtjt

fdfd 23232 fdfdasd dsds dasdfdfd grthjtjt

fdfd 7687898 fdfdasd dsds dasdfdfd grthjtjt

fdfd 23232 fdfdasd dsds dasdfdfd grthjtjt

fdfd 23232 fdfdasd dsds dasdfdfd grthjtjt

fdfd 23232 fdfdasd dsds dasdfdfd grthjtjt

fdfd 7687898 fdfdasd dsds dasdfdfd grthjtjt

fdfd 23232 fdfdasd dsds dasdfdfd grthjtjt

fdfd 453454 fdfdasd dsds dasdfdfd grthjtjt

?

輸出:

不含有 a 文件字段的 b 文件的內(nèi)容

?

解 1 :

grep -vFf file1 file2

?

解 2 :

awk 'NR==FNR{a[$1];next}{if(!($2 in a)) print}' file1 file2

?

問:

一個文件 aa.txt 的內(nèi)容如下:

[a]

index=1

flag=0

dir=/ddd

[b]

index=2

flag=1

dir=/xxx

[cc]

index=3

flag=0

dir=/dddss

......

我要顯示的內(nèi)容含有 flag=1 的一段內(nèi)容,即

[b]

index=2

flag=1

dir=/xxx

解 1 :

grep -A1 -B2 "flag=1" file

解 2 :

awk 'BEGIN{RS=""}/flag=1/' file

$ cat data

src/top/gm

src

src/top

src/top/tk

src/ha

head/jump

head/x

head/jump/jump2

src/a

src/ab

src/a/b

src/abc

src/ab/c

我想得到 data 文件里面獨(dú)一無二并且最深的路徑列表即

src/top/gm

src/top/tk

src/ha

head/x

head/jump/jump2

src/ab

src/a/b

src/abc

src/ab/c

解 1 :

sort data|sed 'N;/^/(./+/)/n/1/!P;D' data

解 2 :

sort -r 數(shù)據(jù)文件 | awk 'NR==1{a=$0}NR>1&&!index(a,$0"/"){print a;a=$0}END{print a}'

有一些文件,如下:

20090102.ddd_S004_a_01.txt

20090102.ddd_S004_a_02.txt

20090102.ddd_S004_d_03.txt

要將文件名中的 S004 批量替換為 S005 ,用 shell 可以實(shí)現(xiàn),用一個命令能否實(shí)現(xiàn)?

解 1 :

for i in *.txt;do mv $i $(sed "s/S004/S005/" <<<$i);done

解 2 :

rename S004 S005 20090102.ddd*

解 3 :

for i in `ls -l| awk -F_ '$2=="S004"'|awk '{ print $NF }'`;do mv $i $(echo $i|sed 's/S004/S005/');done

######################################################################################################################################

'bash -c "scp -r /var/www/hddatabase/_sys/hadoop/0.18.3/* dachuan@202.114.10.199:~/hd_0.18.3_20100519150256/" '

######################################################################################################################################

?

?

總結(jié)

以上是生活随笔為你收集整理的awk 实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。