awk印刷列

awk印刷列

だから私はデータを別の形式に解析してみましたが、データの最後の列に区切り文字が含まれています。

私が使用している場合:

awk -F: {' print $1 "\t" $2 "\t" $3 '}

データは次のとおりです

ExampleCol1:ExampleCol2:Ex:am:ple:Col3

私はちょうど次を得ます:

ExampleCol1    ExampleCol2    Ex

その後、残りの列をどのようにキャッチできますか$2?だからこんな感じ:

print $1 "\t" $2 "\t" $(REST OF COLUMNS)

答え1

あなたの質問を正しく理解したら、これはあなたに役立ちますか?

sed -e 's/:/\t/1' -e 's/:/\t/1' yourFile

最初の2つのコロンをタブに置き換え、残りを印刷します。

サンプルデータに基づいて、出力は次のようになります。

ExampleCol1    ExampleCol2    Ex:am:ple:Col3

あなたの質問にあなたがいると言ったので、よくわかりません。

ExampleCol1:ExampleCol2:Ex

指定したawkコマンドを実行すると、次の結果が表示されます。

ExampleCol1    ExampleCol2    Ex

答え2

_example='ExampleCol1:ExampleCol2:Ex:am:ple:Col3'

awk -F: '{printf $1 "\t" $2 "\t"} {for(i=3;i<=NF;i++) printf $i "\t"} {print ""}' <<<"${_example}"

...少し汚れて見えますが、出力はされます...

ExampleCol1 ExampleCol2 Ex  am  ple Col3

...欲しいものを表現するより簡潔な方法がありますawk。たとえば...

awk -F: '{for(i=1;i<=NF;i++) printf $i "\t"} {print ""}' <<<"$_example"

...しかし、上記の方法を使用すると、目的の動作に近づくことができます。awk

修正する

ああ、それでは2番目の列の後にコロンがあるはずです...

awk -F: '{printf $1 "\t" $2 "\t"} {for(i=3;i<NF;i++) printf $i ":"} {print $NF}' <<<"$_example"

awk...この質問に次のように答える方が正確かもしれません...

ExampleCol1 ExampleCol2 Ex:am:ple:Col3

答え3

1つの方法は次のとおりです。

 $ awk -vOFS="\t" '{
     sub(/:/, OFS)
     sub(/:/, OFS)
 }1' inp

または他の方法で:

 $ awk '! /:.*:/ || sub(/:/, "\t") && sub(/:/, "\t")' inp

答え4

次のコマンドを試してください。素晴らしい作品。

注文する

 sed "s/:/ /3g" filename| awk -F ":" '{print $1,$2,$3}'| sed "s/ /:/3g"| awk 'OFS="\t" {print $1,$2,$3}'

出力

ExampleCol1 ExampleCol2 Ex:am:ple:Col3

関連情報