Bash 从awk中的文件中获取x个最后列数

Bash 从awk中的文件中获取x个最后列数,bash,unix,awk,Bash,Unix,Awk,我有一个包含姓名、职位、部门等列的txt文件。我需要从每个列中获取特定字符,以便为每个列表生成用户名和密码 1,2,3,4,5 a,b,c,d 为了解决这个问题,我首先用以下方法分离列: awk 'NR>10{print $1, $2, $3, ...etc}' $filename #This skips the header information and simply prints out each specified column. 1,2,3,4,5 a,b,c,d 然后继续

我有一个包含姓名、职位、部门等列的txt文件。我需要从每个列中获取特定字符,以便为每个列表生成用户名和密码

1,2,3,4,5
a,b,c,d
为了解决这个问题,我首先用以下方法分离列:

awk 'NR>10{print $1, $2, $3, ...etc}' $filename
#This skips the header information and simply prints out each specified column.
1,2,3,4,5
a,b,c,d
然后继续从各自的字段中获取我需要的每个角色

1,2,3,4,5
a,b,c,d
现在的问题是,每一行都不是统一的。例如,列表按如下方式组织:

1,2,3,4,5
a,b,c,d
(lastName、firstName、middleInitial、position、departmentName)

1,2,3,4,5
a,b,c,d
文本文件中的某些条目没有某些字段,例如“中间首字母”。因此,当我尝试列出字段3、4和5时,没有中间首字母的条目返回:

(position, departmentName, empty/null (I'm not sure how awk handles this))
1,2,3,4,5
a,b,c,d

好消息是我不需要中间的首字母,所以我可以忽略这些列表。如何从文件中获取最后2列(在本例中)以便隔离每个条目的字段,以便从中删除必要的字符?

您可以通过
$(NF-1)
$NF
获得它们,它们是最后2列和最后一列

echo "1,2,3,4" | awk -F,  'BEGIN{OFS=","}{print $(NF-1), $NF}'
1,2,3,4,5
a,b,c,d
NF
表示字段数。如果您有4个字段。(NF-1)将是第3列,
$(NF-1)
是第3列的值

1,2,3,4,5
a,b,c,d
产出将是
3,4

1,2,3,4,5
a,b,c,d
文件中具有不同长度字段的另一个示例: sample.csv

1,2,3,4,5
a,b,c,d

1,2,3,4,5
a,b,c,d
输出:

1,2,3,4,5
a,b,c,d
4,5
c,d

您是否可以添加一些示例数据以进行测试、预期结果以及您目前编写的代码所得到的结果(即使是错误)?哦,还有代码本身,尽可能接近可运行状态。请查看有关提示的说明。祝你好运哇,我真的需要一些格式化帮助。这会独立地从每一行获取最后一个字段吗?因此,如果一行有4个总字段,另一行有5个总字段,$NF将取第4行作为第一行,第5行作为第二行?@LukeDangerKozorosky是的,是的。看看我在回答中的第二个例子,这太棒了!现在,既然我在文件中读取而不是回显文本值,那么使用head命令来清除顶部的垃圾,而不是尝试将某些字段导入该命令,会更有益吗?示例:不要使用awk'NR>10{print$1,$2,$3,…}'$filename并给出特定列,而是使用head跳过前10行并读取其余数据?@LukeDangerKozorosky在我的第二个示例中,该命令处理filePerfect!非常感谢你!