我有一个像这样的文件
user:[dgalanos] rid:[0xa35]
user:[roleary] rid:[0xa36]
user:[smorgan] rid:[0xa37]
我怎样才能只打印这样的用户名
dgalanos
roleary
smorgan
我试过了
cat users.txt | awk -F ':' '{print $2 > "users3.out"}'
但这并没有给我预期的正确结果。
我有一个像这样的文件
user:[dgalanos] rid:[0xa35]
user:[roleary] rid:[0xa36]
user:[smorgan] rid:[0xa37]
我怎样才能只打印这样的用户名
dgalanos
roleary
smorgan
我试过了
cat users.txt | awk -F ':' '{print $2 > "users3.out"}'
但这并没有给我预期的正确结果。
如果您将冒号设置为字段分隔符,则该行
将被拆分为
我猜你想在冒号或空格处拆分,然后删除括号:
此外,
awk
默认从文件中读取,不需要cat
:或者您使用方括号作为字段分隔符:
无论如何,对于这样的任务,我更喜欢
grep
:最简单的方法是修改你的命令如下:
awk -F '[' '{print $2}' users.txt | awk -F ']' '{print $1}' > users3.out
awk
首先捕获 . 之后的[
内容,然后 . 之后的内容]
。您感兴趣的分隔符不是分号,而是括号。|
意味着将第一个命令的输出用作第二个命令的输入。如果您单独使用它,第二个awk
不起作用,但只有当您将它传递给第一个命令时它才有意义。awk
中没有重复输入文件users.txt
。如果您想awk
单独使用第二个,请写:awk -F ']' '{print $1}' users.txt
cat
输出重定向到,awk
因为awk
可以接受文件作为输入awk
命令内部,而应在完整命令的末尾。如果您想在终端中查看结果而不是在文件中,您可以从
>
有一种更优雅的方式来获取数据,而无需通过管道传输两个
awk
命令,而是将两个括号定义为分隔符:awk -F '[][]' '{print $2}' users.txt > users3.out