吹く

吹く

パイプ(|)で区切られた文字列があり、このパイプで区切られた文字列の7列目の最初の文字を見つける必要があります。

AAAAAA|04|XXXXXXX|20170210-163119|||2.0|20170208||

予想出力:2

答え1

切り取りを使用することもできます。

cut -d\| -f7 | cut -c1

答え2

これにより操作が実行されます。

awk -F "|" '{print(substr($7,1,1))}' input.file.txt

答え3

吹く

IFS='|' read -r -a x <<< "$str"
echo "${x[7]:0:1}"

readこのコマンドは$ strの内容を取得してcharに分割し、pipe |xという配列()に入力します-a。次に、7番目のフィールドの先頭から文字を抽出します。

真珠

perl -F'\|' -pale '($_) = $F[6] =~ /./g' <<< "$str"

-F=>フィールド区切り記号、-p=>自動印刷モード、=>-a自動分割オン、=>レコード区切り記号()を-l、に設定します。RS\nORS\n

7番目のフィールドは$F[6]リストコンテキストで評価され、/./g単一文字を返します。ここで最初の文字が選択されて保存されるので、にインポート$_autoprintますstdout

表現

sep='|'
fld="[^$sep]*"
fld7=$(yes "$fld$sep" | sed 7q | tr -d '\n')
expr "$str" : "$fld7\(.\)"

exprここでは、そのタスクを実行するようにコマンドを作成しますunder the hood

echo "$fld"; # => [^|]* echo "$fld7"; # => [^|]*[^|]*....7回

答え4

興味深く勉強するsed行動

sed 's/\(\([^|]\?\)[^|]*|\)\{7\}.*/\2/' input.file.txt

または脱出を減らす

sed -r 's/(([^|]?)[^|]*\|){7}.*/\2/' input.file.txt

または正規表現を避ける

sed '/\n/{s/./\n/2;P;d;};s/|/\n/6;s/$/\n/;D' input.file.txt

関連情報