繁体   English   中英

在bash中使用awk命令从记录中提取单个字段

[英]Using awk command in bash to extract a single field from a record

我想使用awk从记录列表中提取单个字段。 例如,

Assignment1:/home/dir/:Admin:08-07-12
Assignment2:/home/dir/:Paul:09-22-13

我想从第二行中提取第一个字段,或者从第一行中提取第三个字段。 有任何想法吗?

awk -F: 'NR == 2 { print $1 }'
awk -F: 'NR == 1 { print $3 }'

对于给定的行号,打印指定的字段。

没用

抱歉,我使用的是Bourne shell,这不起作用。

正如评论中指出的那样,我认为Bourne shell与该问题没有任何直接关系。 (如果将$IFS设置为奇数,或应用某些其他特殊设置,则可能会起作用。但是在普通的Bourne shell中,应该没有问题。)

这是我在计算机上获得的信息(Ubuntu 14.04衍生版,但我相信在Mac OS X 10.10.3以及几乎所有其他类似Unix的系统上也能获得相同的结果)。 这是使用Bash的,但我认为这不是一个因素-我会弯腰说Korn shell,Zsh,Dash和Heirloom Shell在这方面都可以工作。 哎呀,它也应该在C shell壳系列中起作用,因为所使用的符号没有什么特别的)。 它也使用GNU awk ,但是我也不认为这是一个因素。

$ cat data
Assignment1:/home/dir/:Admin:08-07-12
Assignment2:/home/dir/:Paul:09-22-13
$ awk -F: 'NR == 2 { print $1 }' data
Assignment2
$ awk -F: 'NR == 1 { print $3 }' data
Admin
$

输出对我来说就像记录2,字段1和记录1,字段3。 请找到一种方法来证明您在做什么和得到的结果—可能是在问题中添加了一些内容。 当我们弄清您的设置出了什么问题时,我们可以稍后进行清理。 也请合理清晰地标识您的平台。

您总是可以像这样使用bash中的“剪切”

cut -d ":" -f "1,3" < asdf
Assignment1:Admin
Assignment2:Paul

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM