[英]Trying to execute unix command in awk but receiving error
awk 'BEGIN{FS="|"; } {print $2|"od -An -vtu1"| tr -d "\n"}' test1.txt
我有檔案
1|siva
2|krishna
3| syz 5
我正在嘗試查找字段2的ascii值,但是在命令下面卻給了我錯誤
awk 'BEGIN{FS="|"; } {print $2|"od -An -vtu1"| tr -d "\n"}' test1.txt
awk: BEGIN{FS="|"; } {print $2|"od -An -vtu1 tr -d "\n"}
awk: ^ backslash not last character on line
預期產量
115 105 118 97
107 114 105 115 104 110 97
32 115 121 122 32 53
您實際上並沒有使用任何awk
,也許這更容易...
$ while IFS='|' read -r _ f;
do echo -n "$f" | od -An -vtu1;
done < file
115 105 118 97
107 114 105 115 104 110 97
32 32 115 121 122 32 53
聽起來這就是您要執行的操作:
$ awk '
BEGIN { FS="|" }
{
cmd = "printf \047%s\047 \047" $2 "\047 | od -An -vtu1"
system(cmd)
}
' file
115 105 118 97
107 114 105 115 104 110 97
32 32 115 121 122 32 53
或其他語法,因此輸出來自awk,而不是system()調用的shell:
$ awk '
BEGIN { FS=OFS="|" }
{
cmd = "printf \047%s\047 \047" $2 "\047 | od -An -vtu1"
rslt = ( (cmd | getline line) > 0 ? line : "N/A" )
close(cmd)
print $0, rslt
}
' file
1|siva| 115 105 118 97
2|krishna| 107 114 105 115 104 110 97
3| syz 5| 32 32 115 121 122 32 53
按摩以適合。 您不需要將結果保存到變量中,可以只打印它,但我認為您有時會想知道如何做到這一點,當然也不需要打印$ 0。
我還假設您有某些理由要在awk中執行此操作,例如,它是較大腳本的一部分,否則,與使用shell執行shell命令相比,使用awk調用system調用shell來執行Shell命令只是一個壞主意。
話雖如此,我能想到的最好的shell命令是使用GNU awk來實現多字符RS:
$ awk -F'|' -v ORS='\0' '{print $2}' file |
od -An -vtu1 |
awk -v RS=' 0\\s' '{gsub(/\n/,"")}1'
115 105 118 97
107 114 105 115 104 110 97
32 32 115 121 122 32 53
如果輸入包含'$(command)'
,請參見下面的注釋,它比第一種awk方法更健壯,但是它確實假定您的輸入中沒有NUL字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.