Awk只能打印整条线;无法访问特定字段

时间:2017-12-10 21:03:46

标签: linux bash unix awk

我目前正在研究Unix OS I的顶点项目。我非常接近完成,但我仍然坚持这一部分:基本上,我的任务是创建一个基于菜单的应用程序,用户可以进入我使用该数据,使用它创建用户名,然后将其从小写翻译为大写,最后将数据存储为: firstname:lastname:username

当要求显示数据时,我必须根据用户名而不是名字显示数据,并使用空格而不是制表符进行格式化。例如,它应如下所示:用户名firstname lastname 。所以,我尝试了多个命令,比如sort和awk,但我似乎只能将文件中的字段作为一个大字段来访问;例如,当我awk '{print NF}' users.txt找到每行的字段数时,它将返回1,清楚地表明我的数据仅作为一个字段输入,而不是我需要的3个字段。所以我的问题是:如何更改文本文件中的字段数?这是我的代码,用于将firstname:lastname:username添加到文件users.txt:

userInfo=~/capstoneProject/users.txt
#make sure strings is not empty before writing to disk
if [[ "$fname" != ""  &&  "$lname" != "" ]]
then    #write to userInfo (users.txt)
echo "$fname:$lname:$uname" | tr a-z A-Z >> $userInfo
#change to uppercase using |
fi

是否因为我将数据输入我的文件的方式?使用echo "$fname:$lname:$uname"?因为这是我的教科书向我展示如何做到这一点的方式,以后他们在使用特定字段的排序功能时没有遇到麻烦,正如我现在所做的那样。如果需要更多细节,请告诉我;在今晚提交我的项目之前,这是我需要的最后一件事。

1 个答案:

答案 0 :(得分:0)

您的输入文件包含:个分隔的字段,因此您需要告诉awk:

awk -F':' '{print NF}' users.txt