文字列の2つの列を連結します。

文字列の2つの列を連結します。

2つの文字列列を連結してそれらの間に_を挿入するにはどうすればよいですか?

ファイルがあります:

L  o     45
OK kklkj 5

必要な結果は次のとおりです。

L_o      45
OK_kklkj 5

私は試した:

awk '{printf "%12s %22.2f\n", $1+'_'+$2, $3}' file

文字列を数値に変換します。ありがとうございます。

答え1

使用sed:

sed 's/[[:blank:]]\{1,\}/_/' file

これは、1つ以上の連続したスペース(スペースまたはタブ)が最初に表示されることを単一のアンダースコア文字に置き換えます。

GNUを使用すると、sed次のように短縮できます。

gsed -E 's/\s+/_/' file

これは、指定されたデータに対して上記と同じですが、最初の2つのフィールドの間に対応する文字がある場合は、より大きな空白文字セットと一致します(\sPCRE表記は同様に一致し、[[:space:]]垂直タブ文字、キャリッジリターン文字も含む)。キャリッジリターン文字とフォームフィード文字)。

質問のデータが与えられると、次のような出力が生成されます。

L_o     45
OK_kklkj 5

答え2

使用awk

$ awk '{$0=$1"_"$2FS$NF}1' input_file | column -t
L_o       45
OK_kklkj  5

答え3

これを行う必要があります(源泉):

awk '{$1=(NR==1?"ID":$1"_"$2); $2=""}1' file

必要に応じて、後で標準化できる追加のスペースがあります。

関連情報