1. 程式人生 > >awk命令中執行多條shell命令

awk命令中執行多條shell命令

awk中使用的shell命令,有2種方法:
一。使用system()
二。使用print cmd | “/bin/bash”
http://www.gnu.org/software/gawk/manual/gawk.html#I_002fO-Functions

一。使用所以system()
awk程式中我們可以使用system() 函式去呼叫shell命令如:awk 'BEGIN{system("echo abc")}' fileecho abc 就會做為“命令列”,由shell來執行,所以我們會得到以下結果:

[email protected]:~# awk 'BEGIN{system("echo abc")}'
abc
[email protected]
:~#


[email protected]:~# awk 'BEGIN{v1="echo";v2="abc";system(v1" "v2)}'
abc
[email protected]:~#


[email protected]:~# awk 'BEGIN{v1="echo";v2="abc";system(v1 v2)}'
/bin/sh: echoabc: command not found
[email protected]:~#


[email protected]:~# awk 'BEGIN{v1=echo;v2=abc;system(v1" "v2)}'
[email protected]
:~#

從上面的例子,我們簡單的分析一下awk是怎樣呼叫system的:
如果system()括號裡面的引數沒有加上雙引號的話,awk認為它是一個變數,它會從awk的變數裡面把它們先置換為常量,然後再回傳給shell

如果system()括號裡面的引數有加上雙引號的話,那麼awk就直接把引號裡面的內容回傳給shell,作為shell的“命令列”



二。使用print cmd | “/bin/bash”
[email protected]:~# awk 'BEGIN{print "echo","abc"| "/bin/bash"}'
abc
[email protected]:~#


[email protected]
:~# awk 'BEGIN{print "echo","abc",";","echo","123"| "/bin/bash"}'
abc
123
[email protected]:~#


三。總結
無論使用system()還是print cmd | “/bin/bash”
awk都是新開一個shell,在相應的cmdline引數送回給shell,所以要注意當前shell變數與新開shell變數問題

1.1
[email protected]:~# abc=12345567890
[email protected]:~# awk 'BEGIN{system("echo $abc")}'

[email protected]:~#


1.2
[email protected]:~# export abc=12345567890
[email protected]:~# awk 'BEGIN{system("echo $abc")}'
12345567890
[email protected]:~#

2.1
[email protected]:~# abc=1234567890
[email protected]:~# awk 'BEGIN{print "echo","$abc"| "/bin/bash"}'

[email protected]:~#


2.2
[email protected]:~# export abc=1234567890
[email protected]:~# awk 'BEGIN{print "echo","$abc"| "/bin/bash"}'
1234567890
[email protected]:~#


以上例子,沒有export的話,那些變數都是隻存在於當前shell變數中,所以都是echo不出來的 ,
而使用了 export的都是環境變數,所以awk呼叫新的shell時候,可以echo出來

相關推薦

awk命令執行shell命令

awk中使用的shell命令,有2種方法:一。使用system()二。使用print cmd | “/bin/bash”http://www.gnu.org/software/gawk/manual/gawk.html#I_002fO-Functions一。使用所以syste

java執行shell命令,除了第一其他都未執行

最近專案中需要在在java中執行shell命令,用了最常見方式,程式碼如下: public class ShellUtil { public static String runShell(String shStr) throws Exception

python 執行shell命令

使用py時可能需要連續執行多條shell 命令 1. # coding: UTF-8 import sys reload(sys) sys.setdefaultencoding('utf8'

python3 --Paramiko 遠端連線伺服器,並同時執行shell命令

paramiko.SSHClient().exec_command() 可以執行一條命令;當執行多條命令時,多條命令放在一個單引號下面,各命令之間用分號隔開,且在末尾加上get_pty=True。當多條命令中有引數時,可以這麼寫client.exec_command('cd path;pwd' + ';' +

python利用os.system執行系統命令

先看程式碼(正確程式碼): def UpdateCNSubAllInd(): os.system("cd spiders && scrapy runspider CN_UpdateSubIndex.py") def UpdateSSESubAllInd(): os.sy

懶人的python——一次執行linux命令

今天在公司搞了半天EE2I,一直在敲相同的命令累死了。每次執行ee2i.sh temp命令後,都要到cd到某個目錄下執行下一個shell指令碼。做完一次後又要刪除臨時檔案。總之,重複工作很多,我的指甲都敲累了。所以晚上回到家就寫了個類似的python指令碼來自動化執行這些討厭

Mybatis+MySql 一個標籤執行sql語句

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/cxfly957/article/details/77896590 MySql預設是不支援這種騷操作的,但是並不代表不能實現,只需要在jdbc的配置檔案中

如何在mybatis一個insert,delete,update執行SQL語句

一般我們會在applicationContect中這麼配置: <!-- 1. 資料來源 : DriverManagerDataSource --> <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSo

mysql+mybatis 在mybatis一個標籤,執行sql語句

然後在mybatis對映檔案中的標籤中,一般不能執行多條sql,如下: <insert id="addUser" parameterType="User" > insert into t_users (name,password,phone) values (#{na

mybatis執行sql

jdbc連線中新增 allowMultiQueries=true ,如下 jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/database?useUnicode=tr

shell執行命令的方法

shell中執行多個命令的方法 1、在命令列中同時輸入多個語句: 直接在linux命令列中可以依次執行多個命令,多個命令間可採用“;”、“&&”和"||"分割,三個分隔符作用不同: (1);分割符:前後命令間沒有必然的聯絡,前一個執行結束後、再執行第二個,沒有邏輯關聯;

linux一行執行命令 shell

在命令列可以一次執行多個命令,有以下幾種: & 表示任務在後臺執行 &&表示前一條命令執行成功時,才執行後一條命令 | 表示管道,上一條命令的輸出,作為下一條命令引數 || 表

linux的shell指令碼執行命令的方法

第一種是以分號(;)進行劃分:表示:各命令的執行的果,不會影響其它命令的執行。換句話說,各個命令都會執行,但不保證每個命令都執行成功。 第二種命令之間&&隔開 表示:若前面的命令執

shell 執行命令

一般程式語言執行多行程式碼,比如javapublic void methodA(){     int i = a.read();     System.out.println(i);}如果 1 步 a.read()執行不成功,丟擲了異常,那麼程式不會執行第2步如果是shell

shell指令碼順序執行另幾shell命令

命令執行操作符 多條命令可以在一行中出現。它們可以從左到右順序執行。此時,各條命令之間應以分號( ;)隔開. 如:    pwd ; who | wc -l ; cd /usr/bin 在相鄰命令間可存在邏輯關係,即邏輯“與”和邏輯“或”。 邏輯與操作符“&&

awk 筆記之一 -f 命令保存文本

awk可參考文檔http://awk.readthedocs.io/en/latest/chapter-one.html cat awk/pro {print NR,"======",$0} ###NR打印第幾行,$0打印整行$2$3 > 50 {printf(&qu

windows批處理執行命令

本地環境開啟需要啟動多個服務,每次一個個啟動費時,於是寫個批處理: @echo off   start cmd /k "cd/d D:\environment\zookeeper-3.4.13\bin\ &&zkServer.cmd" start cmd /k "cd/

Linux 連續執行命令

很早之前初學Linux基本命令的時候,看到這個知識點,說實話覺得有點奇葩。一條一條執行多好,非得把幾條命令寫在一起。最近專案在進行過程中,需要完成一些自動化迴歸測試。對了,就是傳說中的“Automation”。 以前一直使用“shell+expect”組合。 後來在使用過

linux學習筆記-同時執行命令

我們在Linux和cmd中經常會遇到這種情況,進入一個目錄執行一條命令,再進入一個目錄執行另一條命令,這種方法效率並不高,今天給大家帶來一種簡便的方法 原始方法 $ cd /var/w

Linux 連續執行命令的方法

多個命令可以放在一行上,其執行情況得依賴於用在命令之間的分隔符。如果每個命令被一個分號 (;) 所分隔,那麼命令會連續的執行下去,如: 引用 [email protected]:/proc> printf "%s/n" "This is executed