コントロールリターンを削除し、1つのテキストファイルの行をマージして、文字数を制限したい
input.txtを含む:
comment 1
comment 2
...
comment n
output.txt 1つの文字列が必要です:
comment 1 comment 2 ... commnet n
ただし、ouput.txtは32文字に制限する必要があります:
comment 1 comment 2 comment 3 co
Sed、awk trなどを使用できますか?
head -c 32 input.txt | tr '\n' ' ' > output.txt
head -c 32
は、最初の32バイトを除くすべてを破棄します。
tr '\n' ' '
は、すべての改行文字をスペース文字に置き換えます。
マルチバイト文字エンコードの場合にbytesの代わりにcharactersを制限したい場合は、代わりにgrep
を使用できます:
tr '\n' ' ' < input.txt | grep -oEe '^.{,32}' > output.txt
Awkは大丈夫です。 1つの方法は次のとおりです。
$ echo -n "comment 1\rcomment 2\r...\rcomment n\r" > input.txt
$ cat input.txt | awk -v FS="" -v RS="" '{for (i=1;i<=32;i++) printf ($i == "\r")? "" : $i}' > output.txt
$ cat output.txt
comment 1comment 2...comment
説明:デフォルトでは、awkは入力を行ごとに処理し、recordと呼ばれる1行で処理します。すべての行が列ごとに処理され、fieldと呼ばれる単一の列があります。すべてのfieldは、1で始まる変数によって参照されます。 $ 1、$ 2、$ 3…
[〜#〜] f [〜#〜] ield [〜#〜] s [〜#〜] eparator to ""
。これにより、awkは文字ごとにスタッフを処理します。次に、[〜#〜] r [〜#〜] ecord [〜#〜] s [〜#〜] eparatorを""
に設定します。すべてのテキストの文字を一度に参照します(つまり、行ごとに処理するコードを記述することなく)。
最後に、文字を簡単に操作できるため、フィールド(つまり文字)をループし、文字がキャリッジリターンでない場合にのみ印刷します。
tr '\n' ' ' < in.txt | cut -c -32
tr '\n' ' '
:入力テキストから新しい行を削除しますcut -c -32
:出力を32文字に制限します