awk命令提取某行的最后一个数值 如何用awk命令提取文件中的某一列并统计该列中某个数字出现的...
\u5229\u7528awk\u547d\u4ee4\u63d0\u53d6\u5176\u4e2d\u4e00\u5217\u5305\u62ec\u7279\u5b9a\u5b57\u7b26\u7684\u6240\u6709\u884c\u600e\u4e48\u529eawk\uff1a\u7528\u4e8e\u4e00\u884c\u4e2d\u5206\u6210\u6570\u4e2a\u201c\u5b57\u6bb5\u201d\u6765\u5904\u7406\u3002\u9002\u5408\u5904\u7406 \u5c0f\u578b\u6570\u636e\u3002
\u8fd0\u884c\u6a21\u5f0f\uff1aawk '\u6761\u4ef6\u7c7b\u578b1{\u52a8\u4f5c1} \u6761\u4ef6\u7c7b\u578b2{\u52a8\u4f5c2} ...' filename
# last | awk '{print $1 "\t" $3}' <== \u67e5\u770b\u767b\u5f55\u8005\u7684\u6570\u636e\uff0c\u53ea\u663e\u793a\u767b\u5f55\u540d\u548cip\u5730\u5740\uff0c\u5e76\u4ee5[tab]\u9694\u5f00
awk \u7684\u5185\u7f6e\u53d8\u91cf
\u53d8\u91cf\u540d\u79f0\u4ee3\u8868\u7684\u542b\u4e49
NF\u6bcf\u4e00\u884c\uff08$0\uff09\u62e5\u6709\u7684\u5b57\u6bb5\u603b\u6570
NR\u5f53\u524d awk \u6240\u5904\u7406\u7684\u662f \u201c\u7b2c\u51e0\u884c\u201d \u6570\u636e
FS\u5f53\u524d\u5206\u9694\u7b26\uff0c\u9ed8\u8ba4\u7a7a\u683c\u952e
awk \u7684\u903b\u8f91\u8fd0\u7b97\u7b26
\u8fd0\u7b97\u5355\u5143\u4ee3\u8868\u542b\u4e49
>\u5927\u4e8e
<\u5c0f\u4e8e
>=\u5927\u4e8e\u6216\u7b49\u4e8e
<=\u5c0f\u4e8e\u6216\u7b49\u4e8e
==\u7b49\u4e8e
!=\u4e0d\u7b49\u4e8e
\u8303\u4f8b\uff1a
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "\t" $3}' <== \u6587\u4ef6/etc/passwd\u662f\u4ee5":"\u5206\u9694\u7684\uff0c\u67e5\u770b\u7b2c\u4e09\u680f\u5c0f\u4e8e10\u7684\u6570\u636e\uff0c\u5e76\u4e14\u53ea\u663e\u793a\u5e10\u53f7\u4e0e\u7b2c\u4e09\u680f
awk '{cnt[($3>100?100:$3)]++} END{for(key in cnt) print key ":" cnt[key]}' file
TS=`grep "energy" OUTCAR | tail -1 | awk '{printf "%12.8f \n", $8 }'`echo $TS >>comment
这样就可以了。
反引号`内的命令被赋值给变量TS。echo $TS输出变量,用>>将输出重定向到comment文件中。
反引号内的命令一共是3个,通过2次管道将输出进行传递。
grep "energy" OUTCAR表示搜索OUTCAR文件中带有energy单词的行
| 表示将上一个命令的输出结果作为下一个命令的输入
tail -1表示取最后一行,这个根据你的OUTCAR文件的内容而定,如果只有一行有单词energy,就不需要这个命令,如果有多行包含energy,就根据需要取相应行。
awk '{printf "%12.8f \n", $8 }' 表示将行的第8列打印出来,awk命令默认列分隔符就是空格,所以你这一行所需要取的数值在第8列上。打印格式为精确到小数点后8位(数值总位数为12位),根据你需要的精度取舍。如果要取完整的数值,也可以直接将这部分改为awk '{printf, $8 }'。
就是这样了。
你可以直接用awk这样做:
awk 'BEGIN{FS="="}{print $2}' xxx.txt
因为我看你最后一个字段前有一个等号,所以用FS="="作为指定字段分隔符
假设文件是OUTCAR
TS=`grep "energy" OUTCAR |tail -1 |awk '{print $5}'`
echo $TS >> comment
绛旓細tail -1琛ㄧず鍙栨渶鍚庝竴琛锛岃繖涓牴鎹綘鐨凮UTCAR鏂囦欢鐨勫唴瀹硅屽畾锛屽鏋滃彧鏈変竴琛屾湁鍗曡瘝energy锛屽氨涓嶉渶瑕佽繖涓懡浠わ紝濡傛灉鏈夊琛屽寘鍚玡nergy锛屽氨鏍规嵁闇瑕佸彇鐩稿簲琛屻俛wk '{printf "%12.8f \n", $8 }' 琛ㄧず灏嗚鐨勭8鍒楁墦鍗板嚭鏉ワ紝awk鍛戒护榛樿鍒楀垎闅旂灏辨槸绌烘牸锛屾墍浠ヤ綘杩欎竴琛屾墍闇瑕佸彇鐨勬暟鍊煎湪绗8鍒椾笂銆傛墦鍗...
绛旓細awk -F" " '{print $4}' xxx | awk -F. '{print $1}'awk -F" " '{print $4}' xxx | sed 's/\.//g'
绛旓細杩欓噷浠s -aux鐨勭粨鏋滀负渚嬶紝鎵撳嵃杩愯绋嬪簭鐨鍛戒护鍏ㄨ矾寰勩傚懡浠ゅ叏璺緞鍦╬s -aux缁撴灉鐨勭10琛屼互鍚庯紝浠庣11琛屽紑濮嬨 濡備笅鏄痯s -aux 鐨勮緭鍑虹粨鏋 鎴戠殑鐩殑鏄埅鍙栧悗闈㈢殑鍛戒护鍏ㄨ矾寰 涔熷氨鏄渶瑕佹墦鍗扮11鍒楀埌鏈鍚涓琛屻俻s -aux |sort -rn -k4 |head -10 : 杈撳嚭鍐呭瓨鍗犵敤鎺掑悕鍓嶅崄鐨勮繘绋 for(i=...
绛旓細awk '{res = cur; cur = $NF} END{print res}' 杩介棶 鍙栧埌鏁版嵁浜,鎴戣繕鎯宠鍊掓暟绗簩琛屽掓暟绗簩鍒楃殑鎬庝箞鎼炲晩?鎴戣瘯浜嗕笅:awk '{res = cur; cur = $(NF-1)} END{print res}'鎶ラ敊浜嗐$NF涓嶆槸鎸鏈鍚庝竴鍒楀悧?鍑1灏辨槸鍊掓暟绗簩鍒楀惂?浣犱笂闈㈤偅鍙ョ殑琛屾暟鏄湪鍝畾涔夌殑鍟?鎴戞渶鍚庝竴鍒楃殑鏁版嵁姣忎竴琛岄兘涓...
绛旓細1銆佸湪linux鐩綍/root涓嬪缓绔涓涓txt鏂囦欢锛屽唴瀹瑰涓嬶紝浣跨敤|绔栫嚎鍒嗗壊锛屼綔涓烘垜浠殑瀹為獙鏁版嵁鏍锋湰銆2銆乻ed鐢ㄦ硶銆乻ed-n'xp'data.txt锛涙樉绀烘枃浠禭琛屾暟鎹,鑾峰彇绗18琛屾暟鎹紝鍗充负sed-n'18p'data.txt銆3銆乻ed-n'寮濮嬭锛岀粨鏉熻p'data.txt锛涙樉绀烘枃浠禭琛屽埌Y琛岀殑鍐呭锛鍛戒护锛歴ed-n'10,18p'data.txt銆4銆...
绛旓細export s=`awk 'NR==2' a.txt`awk 'NR==3{$0=ENVIRON["s"]};1' b.txt > c.txts=`awk 'NR==2' a.txt` 琛ㄧず灏嗙2琛岃祴鍊肩粰s, $0=ENVIRON["s"] 琛ㄧず鏇挎崲锛岀粨鏋滃瓨鍦╟.txt 鐢 sed 瑙e喅鏇存柟渚 sed -i "3s/.*/`sed -ne 2p a.txt`/" b.txt鐩存帴淇敼 b.txt ...
绛旓細绀轰緥锛氭墦鍗癷nstall.log鏂囦欢涓浜旇锛岀浜屾锛堟寜鐓х┖鏍煎垎娈碉級鐨勬枃瀛楋細
绛旓細鍙互銆俢ut -d" " -f2 filename 鎰忔濆氨鏄垜浠ョ┖鏍间负鍒楃殑鍒嗛殧绗︼紝鎻愬彇绗簩鍒 鎴栬呬娇鐢awk awk '{print $2}' filename awk榛樿浠ョ┖鏍间负鍒嗛殧绗︼紝鎵撳嵃绗簩鍒
绛旓細ARGV : 鍖呭惈鍛戒护琛鍙傛暟鐨勬暟缁勩侰ONVFMT : 鏁板瓧杞崲鏍煎紡锛堥粯璁ゅ间负%.6g锛夈侲NVIRON : 鐜鍙橀噺鍏宠仈鏁扮粍銆侲RRNO : 鏈鍚庝竴涓绯荤粺閿欒鐨勬弿杩般侳IELDWIDTHS : 瀛楁瀹藉害鍒楄〃锛堢敤绌烘牸閿垎闅旓級銆侳ILENAME : 褰撳墠杈撳叆鏂囦欢鐨勫悕銆侼R : 琛ㄧず璁板綍鏁帮紝鍦ㄦ墽琛岃繃绋嬩腑瀵瑰簲浜庡綋鍓嶇殑琛屽彿 FNR : 鍚孨R :锛屼絾鐩稿浜庡綋鍓...
绛旓細awk鏄幓鍙栫涓夎涓瘡鍒楃殑鏈澶у硷紝鏈鍚缁撴灉鍚堝苟灏卞彲浠ユ弧瓒抽渶姹傚暒銆俵inux鎬庝箞鏌ョ湅鏈夋晥鐨勮锛熶竴锛屾柟娉1nlfile-name|sed-n5p鏌ョ湅绗簲琛屼簩锛屾柟娉2head-nfile_name|tail-1鏌ョ湅绗琻琛屼笁锛屾柟娉3.杈撳嚭涓涓鏂囦欢鐨勭4琛宻ed-n4pufileawkNR==4ufilehead-4file|tail-1鍥涳紝鏂规硶42.杈撳嚭鏂囦欢鐨勭3鍒(榛樿鍒嗛殧...