含まれるコロンの数に基づいて列の値を変更します。

含まれるコロンの数に基づいて列の値を変更します。

含まれているコロンの数に基づいて2番目の列の内容を操作します。 2番目のフィールドに複数のコロンが含まれている場合は、最初のコロンの前にある値が必要です。

#Input    
1 1131:11854476:4:1$ 0 114476 1 4
5 367504:11862778:4:2$ 0 118628 2 4
3 3:64357_3_2$ 0 18267 2 3 
4 7575:38680372:1$ 0 38372 1 2

# Output
1 1131 0 114476 1 4
5 367504 0 118628 2 4
3 3:64357_3_2$ 0 18267 2 3 
4 7575 0 386372 1 2

ファイル全体を操作または処理した後に個々の列をコピーする方法に関するさまざまな提案に触れました。ひもただし、未処理の残りの列は維持する必要があります。単一のコマンド(awk/ one-liners)または複数のコマンドcutでこれを達成する方法についてのアイデアを提供できますか?

ベストアンサー1

split2番目のフィールドをオンにする:ことができ、2つ以上のフィールド(つまり、配列内の要素数z)がある場合は、最初のフィールドのみを維持します。

awk '{n=split($2, z, ":");if (n > 2) $2=z[1]};1' infile

使用したい場合は、sub次のようにできます。

awk '{sub(/:.*:.*/,"",$2)};1' infile

つまり、コロンの2つ(またはそれ以上)を変更してみてください。

おすすめ記事