grep/awk 基于特定字段的特定行;在 awk 中使用 ksh 变量
grep/awk specific lines based on specific fields; using ksh variable with awk
我有这个输入文件:file_in.txt(用竖线分隔)
3345:tyg|rty|27|0|0|ty6|{89|io|}62|0
3346:tyg|rtyuio|63|0|1|ty6|{89|gh|}45|0
3347:tyu|ray|24|0|0|ty6|{89|uh|}27|0
3348:tyg|rtoy|93|0|1|ty6|{89|yh|}1|0
3349:tyo|rtert|28|0|0|ty6|{89|gh|}27|0
我只想获取第 9 个字段值为 }27
的行,使用 '|'
作为分隔符,这样我的输出应该是:
3347:tyu|ray|24|0|0|ty6|{89|uh|}27|0
3349:tyo|rtert|28|0|0|ty6|{89|gh|}27|0
以下命令工作正常:
awk -F"|" '{ if ( == "}27") print [=13=] }' file_in.txt
但是我想使用 shell 变量而不是 "}27"
我试过这个:
taskid="}27"
awk -v tid="$taskid" -F"|" '{ if ( == "}tid") print [=14=] }' file_in.txt
请帮我找出这个命令哪里出错了。
任何其他实现相同目的的命令建议都表示赞赏。
这应该有效:
taskid="}27"
awk -F'|' -v tid="$taskid" ' == tid' file
输出:
3347:tyu|ray|24|0|0|ty6|{89|uh|}27|0
3349:tyo|rtert|28|0|0|ty6|{89|gh|}27|0
您自己的命令应该适用于此更改:
$ ksh
$ taskid=}27
$ awk -v tid=$taskid -F"|" '{ if ( == tid) print [=10=]}' file_in.txt
Output:
3347:tyu|ray|24|0|0|ty6|{89|uh|}27|0
3349:tyo|rtert|28|0|0|ty6|{89|gh|}27|0
假设您的 shell 变量 $tasked 的值为 27
,您想使用以下形式之一:
用 shell
中的左大括号构建字符串
awk -v tid="}$taskid" -F"|" ' == tid' file
或者在 awk 中完成 --- awk 的字符串连接只是将字符串并排放置,中间有可选的空格
awk -v tid="$taskid" -F"|" ' == "}" tid' file
我有这个输入文件:file_in.txt(用竖线分隔)
3345:tyg|rty|27|0|0|ty6|{89|io|}62|0
3346:tyg|rtyuio|63|0|1|ty6|{89|gh|}45|0
3347:tyu|ray|24|0|0|ty6|{89|uh|}27|0
3348:tyg|rtoy|93|0|1|ty6|{89|yh|}1|0
3349:tyo|rtert|28|0|0|ty6|{89|gh|}27|0
我只想获取第 9 个字段值为 }27
的行,使用 '|'
作为分隔符,这样我的输出应该是:
3347:tyu|ray|24|0|0|ty6|{89|uh|}27|0
3349:tyo|rtert|28|0|0|ty6|{89|gh|}27|0
以下命令工作正常:
awk -F"|" '{ if ( == "}27") print [=13=] }' file_in.txt
但是我想使用 shell 变量而不是 "}27"
我试过这个:
taskid="}27"
awk -v tid="$taskid" -F"|" '{ if ( == "}tid") print [=14=] }' file_in.txt
请帮我找出这个命令哪里出错了。 任何其他实现相同目的的命令建议都表示赞赏。
这应该有效:
taskid="}27"
awk -F'|' -v tid="$taskid" ' == tid' file
输出:
3347:tyu|ray|24|0|0|ty6|{89|uh|}27|0
3349:tyo|rtert|28|0|0|ty6|{89|gh|}27|0
您自己的命令应该适用于此更改:
$ ksh
$ taskid=}27
$ awk -v tid=$taskid -F"|" '{ if ( == tid) print [=10=]}' file_in.txt
Output:
3347:tyu|ray|24|0|0|ty6|{89|uh|}27|0 3349:tyo|rtert|28|0|0|ty6|{89|gh|}27|0
假设您的 shell 变量 $tasked 的值为 27
,您想使用以下形式之一:
用 shell
中的左大括号构建字符串awk -v tid="}$taskid" -F"|" ' == tid' file
或者在 awk 中完成 --- awk 的字符串连接只是将字符串并排放置,中间有可选的空格
awk -v tid="$taskid" -F"|" ' == "}" tid' file