最初の行の最初の要素「8」の周りに括弧を追加したいと思います。私のファイルの例は次のとおりです。
8 089.3 96.72 61 2 0 4240 4300 2420 2360 3e-20 102
8 089.3 96.67 60 0 1 4239 4296 2419 2360 1e-18 96.9
結果を得るには、次のコマンドを使用します。
awk '{print "("$0")"}' file.txt1
結果は次のとおりです。
(8 089.3 96.72 61 2 0 4240 4300 2420 2360 3e-20 102)
(8 089.3 96.67 60 0 1 4239 4296 2419 2360 1e-18 96.9)
以下のような出力が必要です。
(8) 089.3 96.72 61 2 0 4240 4300 2420 2360 3e-20 102
(8) 089.3 96.67 60 0 1 4239 4296 2419 2360 1e-18 96.9
答え1
ソースファイルのフィールド区切り文字がタブ(および/またはタブ区切りの出力が必要な場合)であると仮定すると、awk
次のように使用できます。
awk -F '\t' -v OFS='\t' '{ $1 = sprintf("(%s)", $1) } 1' file
これにより、最初のフィールドが変更され、次に変更されたフィールドに再構成された行が出力されます。最後の1
結果は出力になり、置き換えることができます{ print }
。
あなたのコードはこれと似たようなことをしますが、あなたは次のようになります$0
。みんな最初のフィールドだけでなく行。
を使用することもできますsed
。これにより、残りの行は変更されません。
sed -E 's/^([^[:blank:]]+)/(\1)/' file
これは、行の先頭で空白以外の文字列と一致し、括弧内の同じ文字列に置き換えます。
もう1つの変形は、sed
最初に(
行の先頭にaを挿入してから最初の)
スペース文字の前に挿入することです(「スペース」文字はスペースまたはタブを意味します)。
sed -E -e 's/^/(/' -e 's/([[:blank:]])/)\1/' file
このawk
ソリューションは簡単に修正できるため、より柔軟です。どのフィールドですが、sed
ソリューションを使用すると、複数の空白でもタブでも、元のファイルの区切り文字を保持できます。sed
行の最初のフィールドを変更し、そのフィールドをプログラムで簡単に使用できるので(見つけやすく)、ここにソリューションのみを含めますsed
。