可変サイズの行を読み、その内容をテキストを含む別の行に分割します。

可変サイズの行を読み、その内容をテキストを含む別の行に分割します。

可変長のヘッダー(最初の行)を持つファイルがあります。

"One"|"Two"|"Three"

または

"One"|"Two"|"Three"|...|"One Hundred"

ループを実行して新しいファイルに変換しようとしています。

"Hello One!"
"Hello Two!"
"Hello Three! ..."
"Hello One Hundred!"

どうすればいいですか? awkを使用していますか? sed?

寸法を変更しないと、解決策が見つかりません。

私のオペレーティングシステムはですLinux-RedHat-RHEL-6

答え1

以下は、2回のsed呼び出しを含む単純なソリューションです(各行が引用されていると仮定)。

sed -n '1s#"|"#"\n"#gp' file | sed 's#"\(.*\)"#"Hello \1!"#'

最初の sed コマンドは「|」を改行文字に置き換えます。次に、テキストと感嘆符を追加します。

データがなく、|周囲の環境が"オプションの場合は、次のものを使用することもできます(より速くする必要があります)。

head -1 file | tr \| \\n | sed 's#"\?\(.*\)"\?#"Hello \1!"#'

答え2

bash:パイプで区切られた単語を配列として読み込みます。

IFS='|' read -ra words < <(head -n 1 file)
printf "Hello %s!\n" "${words[@]}"

awk:行の単語を繰り返します。

awk -F'|' 'NR == 1 { for (i=1; i<=NF; i++) print "Hello " $i "!"; exit}' file

そしてsed:

sed -e 2Q -e 's/\([^|]\+\)/Hello \1!/g' -e 's/[|]/\n/g' file

関連情報