
だから私はデータを別の形式に解析してみましたが、データの最後の列に区切り文字が含まれています。
私が使用している場合:
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