この行がありますが、各部分を分離したいので、awkを使用してこの分離を実行したいと思います。
元の行は次のようになります。
3302491505_8139829707_13970101.csv
私が望む出力は次のとおりです。
8139829707
またはこれ:
3302491505
答え1
カットを使用してこれを行うことができます。
$ cut -d_ -f2 <<< "3302491505_8139829707_13970101.csv"
8139829707
答え2
この試み:
awk -F'[_.]' '{print $2; print $1}' <<< "3302491505_8139829707_13970101.csv"
-F
フィールド区切り記号を_
またはに設定します.
。フィールド$1
と$2
。
答え3
これにより、すべての部品が個別に印刷されます。
$ awk -F'[_.]' '{print $1; print $2; print $3; print $4}' <<< "3302491505_8139829707_13970101.csv"
3302491505
8139829707
13970101
csv
必要なフィールドを使用できます。
$ awk -F'[_.]' '{ print $3;}' <<< "3302491505_8139829707_13970101.csv"
13970101
答え4
Bourneのようなシェルには文字列を分割する方法が組み込まれています。これは、引用符で囲まれていない引数が拡張されたときに発生します。
したがって、実際に必要なときにのみ使用することは公平であるようです。
IFS=_ # split on _
set -o noglob # leaving a parameter expansion unquoted also
# involves filename generation which we don't want here
var=3302491505_8139829707_13970101.csv
set -- $var # $var unquoted means its split
printf '%s: %s\n' First "$1" Second "$2" Third "$3"
一部のシェルには文字列を分割する手間がかからない方法があります。
存在するzsh
:
var=3302491505_8139829707_13970101.csv
non_empty_parts=(${(s:_:)var})
parts=("${(@s:_:)var}")
または直接:
printf '%s\n' "Second part: ${${(s:_:)var}[2]}"