ファイルの1行を2つの列に分割

ファイルの1行を2つの列に分割

行を2つの列に分割したい

./ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****

上の行のコロン(:)が区切り文字として機能し、次のように出力されるようにします。

./ABC/dce/app/config/fgh/pqr/app.properties                        app.pass

誰でも私を助けることができますか?

答え1

あなたはそれを使用することができますawk

awk -F"[:=]" '{print $1"\t"$2}' $file

2つの区切り文字を設定して、FSそれ以降のすべての項目を=列にして除外できます。

また、使用することができますsed

sed -E 's/(^.*):(.*)=.*/\1\t\2/'

出力*

./ABC/dce/app/config/fgh/pqr/app.properties     app.pass

答え2

あなたは試すことができます:

echo "./ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****" | tr ':' '\t'

答え3

また、awk次の可能性を使用してください。

echo './ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****' | awk 'sub(/=[^=]*$/,""){sub(/:/,"\t")} 1'
./ABC/dce/app/config/fgh/pqr/app.properties     app.pass
  • sub()置換が成功した場合は1を返し、それ以外の場合は0を返します。
  • 条件:最初のsub()機能。代替案はありますか?その場合は、2番目のsub()機能を実行します。
  • 最初sub()sub(/=[^=]*$/,"")削除から=最後まで。
  • 2番目sub():タブsub(/:/,"\t")の交換:\t

答え4

使用幸せ(以前のPerl_6)

コロンを1つだけ分割したい場合:

raku -ne '.split(":").join("\t").put;'

ただし、2番目の要素(索引= 1)をクリーンアップするには、次のようにします。

raku -ne '.=split(":"); put( .[0] ~ "\t" ~ .[1].subst(/ \=.* /));'  

入力例:

./ABC/dce/app/config/fgh/pqr/app.properties:app.pass=*****

出力例(1):

./ABC/dce/app/config/fgh/pqr/app.properties    app.pass=*****

出力例(2):

./ABC/dce/app/config/fgh/pqr/app.properties    app.pass

簡単に言えば、このsplit手順は:大腸を破壊的に分割して除去することです。最初の例では、結果の文字列はタブ文字を使用して再結合されます\t。 2番目の例では、結果の文字列は実際には割り当て$_演算子を使用してトピック変数に再保存されるため、.=2番目の操作(.=例、短縮型$_.=)を実行できます。 2番目の操作は正規表現を何もsubst変更しません(つまり削除します)。\=.*

Rakuの文字列連結は、~チルダ文字で行われます。上記のコードは要求された操作を実行します。ただし、列間の間隔を変更するには、同様の文字列連結を使用してみることができます~ "\t" xx 4 ~(たとえば、\tタブ文字が4回繰り返されます)。

https://raku.org

関連情報