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
答案 0 :(得分:0)
您实际上并没有使用任何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
答案 1 :(得分:-1)
听起来这就是您要执行的操作:
$ 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)'
,但它确实假定您的输入中没有NUL字符,请参见以下注释,它比第一种awk方法更健壮。