我知道如何使用 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:
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
或者使用Python:
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}
匹配末尾的第三列等。