区切り文字に基づいて文字列をファイルに分割しようとしていますが、正しく実行できません...以下のコードを次に示します。
awk 'var=split($2,arr,'\'); {print $var}' file1.dat
これが私のサンプルデータです。
Col1 Col2
abc 123\abc
abcd 123\abcd
希望の出力:
Col1 Col2
abc abc
abcd abcd
splitを呼び出す必要はありません。\\
フィールドセパレータとして使用するだけです。
echo 'a\b\c\d' | awk -F\\ '{printf("%s,%s,%s,%s\n", $1, $2, $3, $4)}'
出力:
a,b,c,d
サンプルデータと出力は、あなたの要件を推測するのに最適です。
echo '1:2\\a\\b:3' | awk -F: '{
n=split($2,arr,"\\")
# print "#dbg:n=" n
var=arr[3]
print var
}'
出力
b
split
分割することがわかったフィールドの数を返すことを思い出してください。デバッグ行のコメントを解除すると、値3が返されます。
また、私のテストでは、1を処理するために2つの'\'文字を使用する必要があったことにも注意してください。ファイルにそれが必要になるとは思いませんが、これがファイルで機能しない場合は、必要に応じてデータに「\」を追加してみてください。'\'の使用方法についていくつかのバリエーションを試しましたが、これが最も簡単なようです。他の人はコメントを歓迎します!
これがお役に立てば幸いです。
いくつかのコメントで述べたように、あなたは一重引用符をネストしています。二重引用符を使用するように1つのセットを切り替えると、修正されるはずです。
awk 'var=split($2,arr,"\"); {print $var}' file1.dat
splitを使用するよりも、別のawkコマンドにパイプする方がいいと思います。一方が他方より優れているかどうかはわかりませんが、これは単なる好みです。
awk '{print $2}' file1.dat | awk -F'\' '{...}'
分割しようとしているバックスラッシュをエスケープする必要があります。split
次のような二重引用符を使用して、これを行うことができます。"\\"
また、配列スライスを取得して、コードを読みやすくすることもできます(また、別の変数を定義しないようにすることもできます)。これはあなたのために働くはずです:
awk 'NR==1 { print } NR>=2 { split($0,array,"\\"); print $1,array[2] }' file1.dat
HTH
awk '{sub(/123\\/,"")}1' file
Col1 Col2
abc abc
abcd abcd