可変長のヘッダー(最初の行)を持つファイルがあります。
"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