各行の前にスペースがある次の形式のファイルがあります。
"Western Overseas",
"Western Overseas",
"^",
"--",
"^",
"--",
"--",
null,
24995,
9977,
"CR",
"Western Refrigeration Private Limited",
"Western Refrigeration Private Limited",
"[ICRA]A",
"--",
"[ICRA]A1",
"--",
"Stable",
null,
14951,
2346,
"CR",
次の形式のCSVファイルに変換したいと思います。
"Western Overseas","Western Overseas","^","--","^","--","--",null,24995,9977,"CR"
"Western Refrigeration Private Limited","Western Refrigeration Private Limited","[ICRA]A","--","[ICRA]A1","--","Stable",null,14951,2346,"CR"
使用しようとしていますtr
が、すべての出力を1行に印刷し、改行を二重改行に置き換えると思うので問題があります。助けてくれてありがとう。
答え1
awkの解決策は次のとおりです。
awk '{if(NF){gsub(/^ |,$/,""); printf c $0; c=","}else{printf "\n"; c=""}};END{printf "\n"}'
拡張説明:
{
if(NF) { # if the line isn't empty
gsub(/^ |,$/,""); # remove the first space and last comma
printf c $0; # print the line (without a newline)
c="," # set c to add a comma for the next field
} else {
printf "\n"; # empty line, output a newline
c="" # don't print a comma for the next entry
}
};
END {
printf "\n" # finish off with a newline
}
答え2
<file sed '
:start
s/\n$//
t
s/\n //
N
b start
' | sed 's/,$//'
最初は、最後の改行文字を見つけて削除するまで()ループを繰り返し、(、sed
):start
パターンb start
スペース()に行を追加します。これは空行を読み、ツールがループを終了したことを意味します()。各反復に残っている改行(および連続した空白)は、行を連結するために削除されます()。N
s/\n$//
t
s/\n //
2番目は末尾のsed
カンマを削除します。