如何使用 awk 从文件中获取冒号 (:) 后面的单词

如何使用 awk 从文件中获取冒号 (:) 后面的单词

对于 shell 脚本,我需要从文件中获取用户的密码,该文件有一行,其中包含 4 个参数的值,如下所示。

*:*:*:test:test

我想单独获取第三列和第四列(不包括冒号(:))并将其传递给另一个变量。

答案1

你可以使用类似的东西:

VARIABLE=$(awk -F\: '{print $4}' input_file)

这会将第四个参数分配给名为的变量VARIABLE

答案2

假设没有明确强制使用awk,请使用 Bash 功能来避免使用外部进程:

IFS=':' read _ _ myCol3 myCol4 _ < myFile

_是一个有效的变量名,但通常将其用作丢弃点。最后一个_获得任何额外的字段。

我注意到您的示例数据有五个值,而不是您所说的 4 个。

编辑:要设置从文件中提取的多个数组值(在本例中为我的 passwd 文件的第 11 行):

$ myArray+=( $( awk < /etc/passwd '-F:' 'NR == 11 { print $1, $3, $6; }' ) )
$ declare -p myArray
declare -a myArray=([0]="uucp" [1]="10" [2]="/var/spool/uucp")
$ echo "${myArray[1]}"
10

相关内容