1. 程式人生 > >awk next和getline用法

awk next和getline用法

next

在迴圈逐行匹配,如果遇到next,就會跳過當前行,直接忽略下面語句。而進行下一行匹配

即:如果呼叫next,那麼next之後的命令就都不執行,此行文字的處理到此結束,開始讀取下一條記錄並操作

如下實驗: 我們不想要檔案的第一行註解內容 則可以用next 當NR等於第一行的時候 調過開始處理下一行

[[email protected] other]# cat 1.txt 
Name         Age
Minho        20
ACT          40
Python       99
Karubin      18
C#           33 
[[email protected]
other]# awk '{if(NR==1){next}print}' 1.txt Minho 20 ACT 40 Python 99 Karubin 18 C# 33

下面再看一個例子

[[email protected] other]# cat a.txt    #把a.txt換成下面的格式輸出
web01[192.168.2.100]
httpd            ok
tomcat               ok
sendmail               ok
web02[192.168.2.101]
httpd            ok
postfix               ok
web03[192.168.2.102]
mysqld            ok
httpd               ok
[
[email protected]
other]# awk '/^web/{T=$0;next}{print T":\t"$0}' a.txt #匹配web開頭的next調過不處理 並儲存到變數T web01[192.168.2.100]: httpd ok web01[192.168.2.100]: tomcat ok web01[192.168.2.100]: sendmail ok web02[192.168.2.101]: httpd ok web02[192.168.2.101]: postfix ok web03[192.168.2.102]: mysqld ok web03[192.168.2.102]: httpd ok [
[email protected]
other]# awk '/^web/{T=$0;next}{print T":\t"$0}' a.txt |column -t #為了格式更整齊 用了 column命令 -t引數 web01[192.168.2.100]: httpd ok web01[192.168.2.100]: tomcat ok web01[192.168.2.100]: sendmail ok web02[192.168.2.101]: httpd ok web02[192.168.2.101]: postfix ok web03[192.168.2.102]: mysqld ok web03[192.168.2.102]: httpd ok

getline

awk getline  主要是把shell命令的資料傳遞給awk
當其左右無重定向符 | 或 < 時,getline作用於當前檔案,讀入當前檔案的第一行給其後跟的變數var或$0(無變數)

當其左右有重定向符 | 或 < 時,getline則作用於定向輸入檔案

[[email protected] other]# cat 1.txt 
Name         Age
Minho        20
ACT          40
Python       99
Karubin      18
C#           33 
[[email protected] other]# awk 'BEGIN{"cat 1.txt" | getline;print $0}'     #getline後面沒有跟變數時 內容讀到$0
Name         Age
[[email protected] other]# awk 'BEGIN{"cat 1.txt" | getline f;print f}'
Name         Age
[[email protected] other]# awk 'BEGIN{getline f < "1.txt";print f}'
Name         Age
[[email protected] other]# awk 'BEGIN{getline < "1.txt";print $0}'
Name         Age

awk本質上就是一個for迴圈,它每次對輸入檔案的一行進行處理,然後轉而執行下一行,直到整個檔案的每一行都被執行完畢。整個過程是自動的,你無需做什麼。但是,getline命令卻可以讓你去控制迴圈。當然,getline命令執行後,awk會設定NF,NR,FNR和$0等這些內部變數

例子:列印1-10之間的偶數

[[email protected] other]# seq 10 | awk '{getline n;print n}'
2
4
6
8
10

getline是得到行,但是並不到得到當前行而是當前行的下一行。以上面的例子來分析,awk首先讀取到了第一行,就是1,然後getline,就得到了1下面的第二行,就是2,因為getline之後,awk會改變對應的NF,NR,FNR和$0等內部變數,所以此時的$0的值就不再是1,而是2,然後將它打印出來。以此類推,就可以得到上面的結果。同樣,我們可以利用getline只打印出奇數行

[[email protected] other]# seq 10 | awk '{T=$0;getline;print T}'      #getline之後 awk改變了對應的NF NR FNR和$0等內部變數
1
3
5
7
9

與列印偶數行的唯一區別就是print $0和getline的順序不一樣。因為getline在print $0之後,此時的$0仍然是第一行。然後getline,$0變成了下一行2。依次類推,就打印出了奇數行

奇偶行對調列印

[[email protected] other]# seq 10 | awk '{T=$0;getline n;print n;print T}'
2
1
4
3
6
5
8
7
10
9

另外getline也可以從另外一個檔案中讀取內容。下面例子實現將兩個檔案的每一行都列印在一行上

a.txt檔案的內容為上面打印出來的第一列,b.txt檔案的內容為上面打印出來的第二列

[[email protected] other]# awk '{printf "%s ",$0;getline < "b.txt";print $0}' a.txt
1 6
2 7
3 8
4 9
5 10

此外,getline也可以用來執行一個UNIX命令,並得到它的輸出。下面例子通過getline得到系統的當前時間

[[email protected] other]# awk 'BEGIN{"date"| getline; close("date"); print $0}'
Tue Mar 27 14:06:51 CST 2018

測試 通過awk把檔案的兩行內容輸出成一行(利用getline用法)

同樣可以通過設定輸出記錄換行符ORS或者printf(預設輸出不換行)搞定 這樣在終端顯示可能有些問題

awk '{if(NR==4 || NR==5){tmp=$0;getline;print tmp,$0}}' seq10.txt


相關推薦

awk nextgetline用法

next在迴圈逐行匹配,如果遇到next,就會跳過當前行,直接忽略下面語句。而進行下一行匹配即:如果呼叫next,那麼next之後的命令就都不執行,此行文字的處理到此結束,開始讀取下一條記錄並操作如下實驗: 我們不想要檔案的第一行註解內容 則可以用next 當NR等於第一行的

awk next以及getline用法示例

waiting div line hand 使用 ubuntu 控制 內容 例如 在awk中,如果調用next,那麽next之後的命令就都不執行了。此行文本的處理到此結束,開始讀取下一條記錄並操作。 實例如下: zoer@ubuntu:~$ cat data 1000

awknextgetline的區別

next process class cor cut read 開始 Language top 先看下面的幾行代碼 [root@centos ~]# cat a 1 2 3 4 5 6 7 8 [root@centos ~]# awk ‘{print "$1="$1;ge

c++中輸入字串--cin.getcin.getline用法

c++中cin輸入字串,這個跟java中的scanner物件有點像,今天來說一說cin中get()和getline()用法。首先先說一下兩者的區別: 1、getline()在輸入結束後丟棄換行符,在儲

odoo系統中name_searchname_get用法

打印 per sequence not 添加 product xpath ret 領料單 自動帶出工序和工序序號,兩個條件都能搜索,並且兩個都帶出來顯示在前端: # 輸入工序序號會自動帶出工序名// def name_search(self, cr,user,name=

腳本引用中使用deferasync用法區別

兩個 不依賴 doc 體驗 html 中文 htm 停止 其他 是的,就是在頁面腳本引用的時候設置defer或者async,為什麽會有這兩個屬相來輔助腳本加載那,因為瀏覽器在遇到script標簽的時候,文檔的解析會停止,不再構建document,有時打開一個網頁上會出現空

SQLServer中existsexcept用法

sqlserver sql 一、exists1.1 說明EXISTS(包括 NOT EXISTS)子句的返回值是一個BOOL值。EXISTS內部有一個子查詢語句(SELECT ... FROM...),我將其稱為EXIST的內查詢語句。其內查詢語句返回一個結果集。EXISTS子句根據其內查詢語句的結果

chipmunk 物理引擎的基本概念基本用法

num 碰撞回調 2.0 ddb mat sha print 單獨 得出 chipmunk是一個開源2D物理引擎, 項目主頁:http://code.google.com/p/chipmunk-physics/ 工作需要研究了一下,這個引擎的資料還是不多,我閱讀了

Java sanner類中nextnextLine的區別

浮點 驗證 courier 判斷 回車 nbsp () oid 輸入 next() 與 nextLine() 區別 next(): 1、一定要讀取到有效字符後才可以結束輸入。 2、對輸入有效字符之前遇到的空白,next() 方法會自動將其去掉。 3、只有輸入有效字符後才將其

Linux中awk命令的簡單用法

.cn inux total com mage 簡單 image 用法 int 一、用例1:   cat /proc/meminfo|grep "MemTotal"|awk ‘{print $2}‘   說明,$2表示第2位,$0表示全部,如需表示$,可用$$轉義。

Objective-C中的@property@synthesize用法

有時 頭文件 關鍵字 nbsp nsa atomic 所有者 ica 風險 描述 @代表“Objective-C”的標誌,證明您正在使用Objective-C語言。 是Objective-C語言關鍵詞。 @property與@synthesize配對使用。 功能:讓編譯

HashMap、HashTable、LinkedHashMapTreeMap用法區別

strong style 取出 能力 順序 ron public ons 保存 Java為數據結構中的映射定義了一個接口java.util.Map,它有四個實現類,分別是HashMap、HashTable、LinkedHashMap和TreeMap。本節實例主要介紹這4中實

ES6模塊的importexport用法

ron pan console 完全 any 解決方案 例子 異步加載 直觀 ES6之前已經出現了js模塊加載的方案,最主要的是CommonJS和AMD規範。commonjs主要應用於服務器,實現同步加載,如nodejs。AMD規範應用於瀏覽器,如requirejs,為異步

【轉】mysql的SQL_NO_CACHE(在查詢時不使用緩存)sql_cache用法

his let 作用 upd 做了 ble effect table mea 轉自:http://www.169it.com/article/5994930453423417575.html 為了測試sql語句的效率,有時候要不用緩存來查詢。 使用 SELECT SQL

set的特性基本用法——python3.6

技術 card pda 測試 display pla 不能 差集 pytho 特性 無序,不重復的數據組合,用{}表示,eg:{1,2,3,4,5,6} 用途 去重,把一個列表變成集合,就自動去重了 關系測試,測試兩組數據之間的交集,差集,並集,對稱差集,包含

c語言中###的用法

報錯 用法 == 預處理器 tor () name 文件 就是 一、一般用法 我們使用#把宏參數變為一個字符串,用##把兩個宏參數貼合在一起. 用法: #include<cstdio> #include<climits> using namespac

Skype for business企業語音配置之三 路由PSTN用法

國內 voice href 排除 -o 國際 semi wid 圖片 PSTN 用法記錄規劃 PSTN 用法記錄主要任務是列出當前在組織中對所有員工的所有呼叫權限。下表顯示了典型的 PSTN 用法表。PSTN 用法記錄電話屬性描述Local本地電話Long-Distance

Promise中的next 另一個用法

str 輸出 知識 || ons 銷毀 bind c++ 引用類型 const chainAsync = fns => { let curr = 0 ; const next = (...args) => fns[curr++](next,.

setInterval setTimeout 用法

setInterval 和 setTisetInterval 定時器,開始執行後,每間隔指定時間執行一次,除非清除定時器用法: setInterval(function(){ 方法... },1000);// 間隔時間 setTimeout 是在指定的時間後,執行該事件用法: setTimeout(fun

4.2.#{}${}的用法

{} shm poj 預處理 ${} 註入 接受 map ava #{}:相當於預處理中的占位符?。 #{}裏面的參數表示接收java輸入參數的名稱。 #{}可以接受HashMap、簡單類型、POJO類型的參數。 當接受簡單類型的參數時,#{}裏面可以是value,也可以是