awkでアンダースコアを含む行を分割するにはどうすればよいですか?

この行がありますが、各部分を分離し、awkでこの分離を実行したいと思います。

元の行は次のとおりです。

3302491505_8139829707_13970101.csv 

出力として必要なものは次のとおりです:

8139829707 

またはこれ:

3302491505 

コメント

  • これはあなたが望むものですか:awk -F_ '{for(i=1;i<=NF;i++) print $i+0}' <<<"3302491505_8139829707_13970101.csv"
  • いいえ、そのうちの1つだけを印刷します:8139829707または3302491505
  • _フィールドセパレータとして?少し努力してください

回答

これはカットで行うことができます:

$ cut -d_ -f2 <<< "3302491505_8139829707_13970101.csv" 8139829707 

回答

試してみてください:

awk -F"[_.]" "{print $2; print $1}" <<< "3302491505_8139829707_13970101.csv" 

-Fは、フィールドセパレータを_または.に設定します。フィールド$1$2を設定できます。

コメント

  • これは行全体を印刷します

回答

これはすべての部分を個別に印刷します

$ 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 

回答

echo -n "3302491505_8139829707_13970101.csv" | awk -F"[._]" "{print $1}" 

これは_または.次に、必要なフィールドを印刷します。最初のフィールドを印刷するだけです

  • $1:3302491505
  • $2 2番目のフィールドの場合:8139829707
  • $3 3番目のフィールドの場合:13970101

回答

ボーンのようなシェルには、文字列を分割する方法が組み込まれています。これは、パラメータ展開を引用符で囲まずに残した場合に発生し、それを発生させたくない場合に非常に多くのバグの原因となります。

したがって、実際に使用する場合にのみ使用するのが公正であるように思われます必要です。

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]}" 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です