bash でタブ区切りフィールドを分割しようとしています。
私はこの答えを知っています:シェルで文字列を分割して最後のフィールドを取得する方法
しかし、それはタブ文字には答えません。
タブ文字の前の文字列の一部を取得したいので、これを行っています:
x=`head -1 my-file.txt`
echo ${x%\t*}
しかし、\t は文字 't' に一致し、タブには一致しません。これを行う最善の方法は何ですか?
ありがとう
bash でタブ区切りフィールドを分割しようとしています。
私はこの答えを知っています:シェルで文字列を分割して最後のフィールドを取得する方法
しかし、それはタブ文字には答えません。
タブ文字の前の文字列の一部を取得したいので、これを行っています:
x=`head -1 my-file.txt`
echo ${x%\t*}
しかし、\t は文字 't' に一致し、タブには一致しません。これを行う最善の方法は何ですか?
ありがとう
ファイルが次のようになっている場合 (セパレータとしてタブを使用):
1st-field 2nd-field
最初のフィールドを抽出するために使用できますcut
(デフォルトではタブで動作します):
$ cut -f1 input
1st-field
を使用している場合、入力を次のように変更して、最後の行を取得するためにawk
を使用する必要はありません。tail
1:1st-field 2nd-field
2:1st-field 2nd-field
3:1st-field 2nd-field
4:1st-field 2nd-field
5:1st-field 2nd-field
6:1st-field 2nd-field
7:1st-field 2nd-field
8:1st-field 2nd-field
9:1st-field 2nd-field
10:1st-field 2nd-field
awk を使用したソリューション:
$ awk 'END {print $1}' input
10:1st-field
純粋な bash ソリューション:
#!/bin/bash
while read a b;do last=$a; done < input
echo $last
出力:
$ ./tab.sh
10:1st-field
最後に、を使用したソリューションsed
$ sed '$s/\(^[^\t]*\).*$/\1/' input
10:1st-field
ここで、$
は範囲演算子です。つまり、最後の行のみを操作します。
元の質問には、リテラル タブを使用します。つまり、
x="1st-field 2nd-field"
echo ${x% *}
出力:
1st-field
パラメータ展開で$'ANSI-C'
文字列を使用します。
$ x=$'abc\tdef\tghi'
$ echo "$s"
abc def ghi
$ echo ">>${x%%$'\t'*}<<"
>>abc<<
awk を使用します。
echo $yourfield | awk '{print $1}'
または、あなたの場合、ファイルの最後の行の最初のフィールド
tail yourfile | awk '{x=$1}END{print x}'
x=first$'\t'second
echo "${x%$'\t'*}"
の引用を参照してくださいman bash