csv.awk:
{
readcsv($0);
print $2" by "$3;
}
function readcsv(string)
{
#フィールド番号
n=1;
#コンマ区切り
m=split(string, array , ",");
#完全フィールドか否か
aflag=1;
for(i=1;i<=m;i++){
# " "で括られていない完全フィールド。
if( !(array[i] ~ /^\"/) && !(array[i] ~/\"$/) && aflag){
#ダブルクオートのエスケープ文字を削除
gsub(/\"\"/,"\"", array[i]);
$n=array[i];
n++;
continue;
}
# " "で括られている完全フィールド
if(( array[i] ~ /^\".*\"$/ ) && aflag){
#先頭と末端にあるダブルクオートを削除する
gsub(/^\"/,"", array[i]);
gsub(/\"$/,"", array[i]);
#ダブルクオートのエスケープ文字を削除
gsub(/\"\"/,"\"", array[i]);
$n=array[i];
n++;
continue;
}
# 先頭が "の部分フィールド
if(array [i] ~ /^\"/){
#先頭のダブルクオートを削除
gsub(/^\"/,"", array[i]);
#ダブルクオートのエスケープ文字を削除
gsub(/\"\"/,"\"", array[i]);
aflag=0;
$n=array[i];
continue;
}
# " "で括られていない、続きの部分フィールド。
if(!(array[i] ~ /^\"/) && !(array[i] ~/\"$/) && aflag==0){
#ダブルクオートのエスケープ文字を削除
gsub(/\"\"/,"\"", array[i]);
$n = $n "," array[i];
continue;
}
# 末端が "の部分フィールド
if((array [i] ~ /\"$/) && aflag==0){
#末端のダブルクオートを削除
gsub(/\"$/,"", array[i]);
#ダブルクオートのエスケープ文字を削除
gsub(/\"\"/,"\"", array[i]);
$n = $n "," array[i];
aflag=1;
n++;
continue;
}
}
}
Bash command:
$ cat list.csv | awk -f ./csv.awk