如何从末尾计数的文本行中剪切(选择)一个字段?

ssn*_*ssn 47 shell text-processing cut

我知道如何使用 cut 命令从一行中选择一个字段。例如,给定以下数据:

a,b,c,d,e
f,g,h,i,j
k,l,m,n,o
Run Code Online (Sandbox Code Playgroud)

这个命令:

cut -d, -f2 # returns the second field of the input line
Run Code Online (Sandbox Code Playgroud)

返回:

b
g
l
Run Code Online (Sandbox Code Playgroud)

我的问题:如何选择从末尾开始计数的第二个字段?在前面的示例中,结果将是:

d
i
n
Run Code Online (Sandbox Code Playgroud)

Tho*_*hor 66

前后反向输入cutrev

<infile rev | cut -d, -f2 | rev
Run Code Online (Sandbox Code Playgroud)

输出:

d
i
n
Run Code Online (Sandbox Code Playgroud)

  • `cut` 不能采用负字段索引(如 Python),这太糟糕了。 (4认同)
  • 我的 bin 文件夹中有很多小片段。rcut 正是用于此目的:#!/bin/bash rev | 剪切“$@”| 转速 (2认同)

Gil*_*not 19

尝试使用执行此操作:

awk -F, '{print $(NF-1)}' file.txt
Run Code Online (Sandbox Code Playgroud)

或使用

perl -F, -lane 'print $F[-2]' file.txt
Run Code Online (Sandbox Code Playgroud)

或使用(感谢 manatwork):

ruby -F, -lane 'print $F[-2]' file.txt
Run Code Online (Sandbox Code Playgroud)

或使用bash(感谢 manatwork):

while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt
Run Code Online (Sandbox Code Playgroud)

或者使用

cat file.txt |
python -c $'import sys\nfor line in sys.stdin:\tprint(line.split(",")[-2])'
Run Code Online (Sandbox Code Playgroud)

  • @StephaneChazelas,我想你在最后一句话中的意思是“${d[@]: -2:1}”。 (2认同)