如何使用多个字段分隔符打印字段

时间:2015-06-29 19:56:06

标签: shell unix awk

我希望使用空格和点来分隔数据来打印第二列和最后一列值。

我的输入是

abcds 874598 thd/vb.sbds/jf 48459 com.dat.first.NAME

必需的输出是

874598 NAME 

3 个答案:

答案 0 :(得分:2)

使用awk

$ awk -F'[. ]' '{print $2, $NF}' file
874598 NAME

-F选项将字段设置为单独的字段,我们提供包含空格或句点的character class。 Awk使用字段分隔符值将文件中的每一行溢出到字段中,并将它们存储在递增引用中,$1是第一个字段,$2是第二个字段。 NF是对当前记录中字段数的引用,$NF是最后一个字段的值。

您可以将命令读作:

awk               # the command; awk takes a script and executes it on every input line
-F'[. ]'          # the field separator; break each line up using spaces or periods
'{print $2, $NF}' # the script to execute; print the second and last field on every line
 file             # the input file to run the script on

答案 1 :(得分:0)

使用read和纯BASH:

s='abcds 874598 thd/vb.sbds/jf 48459 com.dat.first.NAME'
IFS=$' \t.' read -ra arr <<< "$s"
echo "${arr[1]} ${arr[-1]}"
874598 NAME

<强>故障:

IFS=' .'    # sets input field separator as space or dot
read -ra    # reads all fields into an array
${arr[1]}   # represents 2nd element in array
${arr[-1]}  # represents last element in array

答案 2 :(得分:0)

从您的评论中听起来像是您想要的:

$ awk -F '[[:space:]]+|[.]' '{print $2, $NF}' file
874598 NAME

或:

$ awk '{sub(/.*\./,"",$NF); print $2, $NF}' file  
874598 NAME