CSVファイルを使用するターゲットがあり、6番目のフィールドに単語が含まれていますが、最大文字長は16文字です。フィールドが16文字を超える場合は、行をコピーして単語を途切れることなく分離したいと思います。
現在のファイル
"5","4","3","2","1","XYZ ABCD E"
"1","2","3","4","5","AB CDE F GHI JK LMNOP Q RS TUV W XYZ 12 3456 7890"
"9","8","7","6","5","LMN O PQ R"
希望の出力
"5","4","3","2","1","XYZ ABCD E"
"1","2","3","4","5","AB CDE F GHI JK"
"1","2","3","4","5","LMNOP Q RS TUV W"
"1","2","3","4","5","XYZ 12 3456 7890"
"9","8","7","6","5","LMN O PQ R"
ベストアンサー1
GNU Awk( gawk
) を使って実行fold
行/変数/コプロセスのインポート
gawk -F, '
BEGIN{
OFS=FS;
cmd="fold -sw 16";
}
# if total length (16 + 2 for quotes) is within limit, print as-is
length($NF) <= 18 {print; next}
# else
{
# trim the quotes, then fold
print substr($NF,2,length($NF)-2) |& cmd;
close(cmd,"to");
NF--;
while((cmd |& getline var) > 0){
# (optional) trim trailing whitespace
sub(/[ \t]+$/,"",var);
print $0, "\"" var "\"" ;
}
close(cmd,"from");
}
' file.csv
ジョブからsub
末尾のスペースを削除しますfold
。
fold -sw17
表示された正確な出力を得るには、16文字を末尾のスペースで囲む必要があります(その後削除されます)。ただし、これを行うと、折りたたまれた出力の最後の行が16文字の制限を超える可能性があります。