モノノフ日記

普通の日記です

Linux板のシェルスクリプトスレ

ファイル操作する仕事があってシェルスクリプトを調べてたら発見しました。

ちょうど>>929のような行結合がやりたかったから助かった。

このスレは勉強になるので読みにいくようにしよう。

【sed】シェルスクリプト総合@LINUX Part2【awk】

929 名前:login:Penguin[sage] 投稿日:2007/07/05(木) 22:22:56 ID:S5Nm9zsS
sedとawkじゃないかも知れないけど。
-hoge
a
b
-fuga
d
e
のようなファイルがあって、
-hoge a b
-fuga d e
のように出力出来ますか?
csplitでファイル分割して、全てのファイルの改行を取れば出来るのですが、
中間ファイル作りたくないし、これが実現出来るコマンドがありそうな気がしたので。

930 名前:login:Penguin[sage] 投稿日:2007/07/06(金) 02:38:15 ID:Vt7J2m8C
>>929
sed s/$/" "/ file.txt |tr -d "\n" |sed s/" -"/"\n-"/g|sed s/" $"//

行末にスペース | 改行を取り除く | "スペース-" の部分で改行 | 行末のスペースを取り除く


931 名前:login:Penguin[sage] 投稿日:2007/07/06(金) 06:23:05 ID:6aMK3M7p
>>930
スパーハカー!なるほど!産休。

932 名前:login:Penguin[sage] 投稿日:2007/07/06(金) 09:36:03 ID:RB1MBV/1
sed 'N;N;s/\n/ /g' hoge
これはあんまり一般的なやり方じゃねぇか?

933 名前:login:Penguin[] 投稿日:2007/07/06(金) 20:31:13 ID:zgIWnM6p
GNU sedオンリーだったかな?・・・\n
Linux板だからいーんじゃ?
Unix板だとperl使えか?



934 名前:login:Penguin[sage] 投稿日:2007/07/06(金) 22:37:56 ID:d5hv1Ayr
\nはPOSIXでも規定されているし大抵の環境で使える筈。
普通に考えれば>>932が順当。

935 名前:login:Penguin[sage] 投稿日:2007/07/06(金) 23:09:36 ID:eiWfMUpf
じゃあ、順当じゃなく。
fmt hoge | tr '-' '\n-'

936 名前:login:Penguin[sage] 投稿日:2007/07/07(土) 01:22:38 ID:FIUQeagW
cat /tmp/test.txt | gawk '/^-/ && NR!=1 {print""} {printf($0" ")} END{print""}'

937 名前:login:Penguin[sage] 投稿日:2007/07/07(土) 02:34:42 ID:Le67A90t
>>929
awk で

{
if ($0 ~ /^\-/ && NR == 1) {
printf("%s ", $0);
} else if ($0 ~ /^\-/ && NR != 1) {
printf("\n%s ", $0);
} else {
printf("%s ", $0);
}
}
END {
print "";
}


938 名前:login:Penguin[] 投稿日:2007/07/07(土) 08:39:22 ID:niJj2YwU
>>937
状態遷移で改行の制御にしてみた
BEGIN {nl=""}
/^-/ {printf("%s%s", nl, $0);nl="\n";next}
{printf(" %s", $0)}
END {printf("\n")}