パイプ(|)で区切られた文字列があり、このパイプで区切られた文字列の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
\n
ORS
\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