複数の列と行を持つファイルがあり、3番目の列の最後の5つの文字列を切り取り、追加の列に印刷する必要があります。たとえば、
1 info1 AAAAAAAAAAA
2 info23 TTTTTTTTTT
3 ingo45 ATATATATATATAT
4 info67 GGGYYYYUUUUUUU
私の結果は次のとおりです
1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45 ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU
次の方法でのみ3番目の列を切り取ることができます。
cat input_file | cut -f3 | grep -o '.\{5\}$' > output_file
しかし、元のテーブルを維持したいと思います。どんな提案がありますか?
答え1
短いAWK
方法:
awk '{ $(NF+1)=substr($NF, length($NF)-4) }1' input-file
$NF
- 最後のフィールド値$(NF+1)
- 最後のフィールドになります(初期の最後のフィールド以降$NF
)。length($NF)-4
- 開始位置/オフセットのインポート5- キャラクタースライシング
出力:
1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45 ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU
----------
文字列を置き換えることで同じ効果が得られます。
awk '{ sub(/.{5}$/, "& &") }1' input-file
/.{5}$/
- レコードの終わりの最後の5文字と一致します。&
- 一致するシーケンス全体を指します。
答え2
sedを使用して&
文字列を置き換える2つの例:
$ sed 's/.\{5\}$/& &/' file
1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45 ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU