-5

これは入力です

R0001 893573.56035613.416.60002 893580.06035624.316.80003 893586.56035635.116.91
R0004 893593.06035646.017.00005 893599.46035656.917.00006 893605.96035667.817.01

これ欲しい

R0001 893573.56035613.416.6
0002 893580.06035624.316.8
0003 893586.56035635.116.91
R0004 893593.06035646.017.0
0005 893599.46035656.917.0
0006 893605.96035667.817.01

Linux centos 5.4 を使用しています

4

2 に答える 2

1

データが「file」という名前のファイルにあると仮定します。

sed -i 's/^\(.\{27\}\)\(.\{26\}\)\(.*\)/\1\n\2\n\3/g' file

sed はテキスト処理用の非常に強力なツールですが、最も使いやすいとは言えません (ただし、このような例を作成する場合は非常に簡単です)。ここに魔法があります:

"-i" は、単一引用符で囲まれた "do this stuff for me" のフラグです。スラッシュで区切られた 4 つの部分で構成される命令があります: 1. コマンド: "s" - 置換 2. パターン: 変更したいもの 3.期待される結果: どのように表示したいか 4. 範囲: "g" - グローバル

パターンは

\(.\{27\}\)\(.\{26\}\)\(.*\)

これは、「行の最初の 27 文字のグループを作成し、次の 26 文字の別のグループを作成し、その行の残りのすべての文字の最初のグループを作成する」ことを意味します。

期待される結果は

\1\n\2\n\3

これは、「グループ 1 を貼り付け、新しい行を貼り付け、グループ 2 を貼り付け、新しい行を貼り付け、グループ 3 を貼り付け」という意味です。

より明確にするために、スクリプトに入れることができます:

#!/bin/bash
COLUMN1=27
COLUMN2=26
FILENAME="file"     
sed -i "s/^\(.\{$COLUMN1\}\)\(.\{$COLUMN2\}\)\(.*\)/\1\n\2\n\3/g" file
exit 0

スクリプトで任意のファイル エディター (私は vim を使用します。他のオプションは emacs、nano、kwrite、kate、geany、gedit など) を開いて、上記のコードを貼り付けます。保存し、エディターを閉じて発行します

chmod +x script

それを実行できるようにします。スクリプトを呼び出すには

./script

これで、スクリプトに引数を提供し、「ファイル」が存在するかどうかを確認し、さらにブレークポイントを追加できます...しかし、それは別の話です。

次に、awk などの別のツールを使用できます (これを強くお勧めしますが、vim で記述するときは通常正規表現を使用し、sed は awk よりも vim に似ているため、より快適に使用できます)。

もっと読む:

http://www.brunolinux.com/02-The_Terminal/Find_and%20Replace_with_Sed.html

http://www.grymoire.com/Unix/Sed.html

http://www.hcs.harvard.edu/~dholland/computers/awk.html

http://www.regular-expressions.info/

于 2013-10-29T21:48:23.177 に答える