最後から計算してテキスト行からフィールドを切り取り(選択)するには?

最後から計算してテキスト行からフィールドを切り取り(選択)するには?

切り取りコマンドを使用して行からフィールドを選択する方法を知っています。たとえば、次のデータが提供されます。

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番目のフィールドを選択する方法計算最後から?前の例では、結果は次のようになります。

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

または使用(仕事をしてくれたManatに感謝します):

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}最後の3番目の列と一致する{1}ように数量子を変更する場合は、最後の1列と一致します。{2}

関連情報