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

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

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

a,b,c,d,e
f,g,h,i,j
k,l,m,n,o

这个命令:

cut -d, -f2 # returns the second field of the input line

返回:

b
g
l

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

d
i
n

答案1

cut使用反转之前和之后的输入rev

<infile rev | cut -d, -f2 | rev

输出:

d
i
n

答案2

尝试这样做:

awk -F, '{print $(NF-1)}' file.txt

或者使用:

perl -F, -lane 'print $F[-2]' file.txt

或者使用(感谢马纳特工作):

ruby -F, -lane 'print $F[-2]' file.txt

或者使用bash(感谢manatwork):

while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt

或者使用:

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

答案3

使用 sed:

sed -E 's/^([^,]*,)*([^,]*)(,[^,]*){1}$/\2/' infile

输出:

d
i
n

解释

  • ([^,]*,)*匹配任意数量的非逗号字符后跟逗号,即任意数量的列。
  • ([^,]*)匹配一列。
  • (,[^,]*){1}匹配末尾的一列,如果将量词更改{1}{2}匹配末尾的第三列等。

相关内容