カットコマンドを使用して行からフィールドを選択する方法を知っています。たとえば、次のデータがあるとします。
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
私の質問:最後から2番目のフィールドcountingを選択するにはどうすればよいですか?前の例では、結果は次のようになります。
d
i
n
cut
の前後の入力をrev
で逆にします。
<infile rev | cut -d, -f2 | rev
出力:
d
i
n
awk でこれを試してください:
awk -F, '{print $(NF-1)}' file.txt
または Perl を使用します:
Perl -F, -lane 'print $F[-2]' file.txt
または Ruby を使用(manatworkに感謝):
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])'
Sedの使用:
sed -E 's/^([^,]*,)*([^,]*)(,[^,]*){1}$/\2/' infile
出力:
d
i
n
([^,]*,)*
は、任意の数の非コンマ文字とそれに続くコンマ、つまり任意の数の列に一致します。([^,]*)
は列に一致します。(,[^,]*){1}
は、末尾の1列に一致します。数量詞{1}
を{2}
に変更すると、末尾から2番目の列に一致します。